2016-07-20 49 views
0

我已经完成了我非常粗略的代码,但我正在优化它。VBA错误91 - 无法设置我的范围

我已经定义了我的工作表,但现在我需要定义我的2个范围rngTo和rngFrom。 rngTo设置没有问题,但rngFrom抛出一个错误91,我不明白为什么。它应该与另一个不同?下面是我认为这是相关代码的一部分,但也有可能是未在此快照使用的一些昏暗的:

Sub Worksheet_UpdateAllItemCostData() 

Dim material As Variant 
Dim fndEntry, rngTo, rngFrom As Range 
Dim wb1 As Workbook, wb2 As Workbook 
Dim wsTo, wsFrom As Worksheet 
Dim lr As Long, I As Long, J As Long 
Const sPOS As String = "Pos. " 

Application.Calculation = xlCalculationManual ' Disable 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

Set wb1 = ThisWorkbook 
Set wsTo = wb1.Sheets("Sagsnr.") 

wsTo.Rows("1:1").Hidden = False 

lr = wb1.Sheets("Sagsnr.").Cells(Rows.Count, "C").End(xlUp).Row 

If lr < 21 Then 
    Exit Sub 
End If 

Set wb2 = Workbooks.Open(Filename:="G:\Backoffice\Tilbudsteam\Kostdatabase\Matcost.xls", ReadOnly:=True) 

Set wsFrom = wb2.Sheets("Matcost") 

    For I = 21 To lr 

     material = wsTo.Range("C" & I).Value 

     Set fndEntry = wsFrom.UsedRange.Columns(4).Find(What:=material) 

    Set rngTo = wsTo.Range("A" & I) 
    Set rngFrom = wsFrom.Range("A" & fndEntry.Row) 

    If Not fndEntry Is Nothing Then 

      rngTo(, "B") = rngFrom(, "H") 

     End If 

Next I 

wb2.Close 
wsTo.Rows("1:1").Hidden = True 

Application.Calculation = xlCalculationAutomatic 'Enable 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 

End Sub 
+2

在'Dim fndEntry,rngTo,rngFrom As Range'行中,只有rngFrom被定义为Range,fndEntry和rngTo的类型是Variant。 –

+0

我不觉得自己像个傻瓜,thx一堆! – Smeltet

回答

1

变化:

Set rngTo = wsTo.Range("A" & I) 
    Set rngFrom = wsFrom.Range("A" & fndEntry.Row) 

    If Not fndEntry Is Nothing Then 

     rngTo(, "B") = rngFrom(, "H") 

    End If 

要:

If Not fndEntry Is Nothing Then 

     Set rngTo = wsTo.Range("A" & I) 
     Set rngFrom = wsFrom.Range("A" & fndEntry.Row) 
     rngTo.Offset(0, 1) = rngFrom.Offset(0, 7) 

    End If 
+0

Thx,然后我得到了“rngTo(,”B“)= rngFrom(,”H“)行的语法错误,我在做什么错? – Smeltet

+0

我更新了我的答案。 '无效,请改用'rngTo.Offset(0,1)'。 –