我基本上试图匹配来自2个工作表的一系列单元格并从相应的列中获取值。
当我运行此代码时,出现错误:
对象不支持此属性或方法
我的代码
Sub Macro2()
Dim rowcount As Integer
Dim target As Variant
rowcount = Range("E2", Range("E2").End(xlDown)).Count
For i = 1 To rowcount + 1
target = Application.Match(ActiveSheet.Cells(i, 6) & "-" & Cells(i, 5) & "-" & Cells(i, 4) & "-" & Cells(i, 3), Worksheets(14).Range("A6:A3000"), 0)
If ActiveSheet.Cells(i, 6) & "-" & Cells(i, 5) & "-" & Cells(i, 4) & "-" & Cells(i, 3) = _
ActiveSheet.Cells(i + 1, 6) & "-" & Cells(i + 1, 5) & "-" & Cells(i + 1, 4) & "-" & Cells(i + 1, 3) Then
ActiveSheet.Cells(i, 17) = Worksheets(14).target.Offset(0, 10)
End If
Next i
End Sub
答案 0 :(得分:1)
如果要查找行计数,则需要使用以下语法:
rowcount = Range(Range("E2"), Range("E2").End(xlDown)).Rows.Count
,使用Long
比Integer
更好。
此外,如果无法使用Application.Match
功能找到成功匹配项,则需要捕获可能的错误,请使用If Not IsError(target) Then
执行此操作。
注意:尽量避免使用ActiveSheet
,而是使用完全限定的工作表,在代码中使用Worksheets("YourSheetName")
。
<强>代码强>
Sub Macro2()
Dim rowcount As Long
Dim target As Variant
rowcount = Range(Range("E2"), Range("E2").End(xlDown)).Rows.Count
For i = 1 To rowcount + 1
target = Application.Match(ActiveSheet.Cells(i, 6) & "-" & Cells(i, 5) & "-" & Cells(i, 4) & "-" & Cells(i, 3), Worksheets(14).Range("A6:A3000"), 0)
If Not IsError(target) Then ' successful Match
If ActiveSheet.Cells(i, 6) & "-" & Cells(i, 5) & "-" & Cells(i, 4) & "-" & Cells(i, 3) = _
ActiveSheet.Cells(i + 1, 6) & "-" & Cells(i + 1, 5) & "-" & Cells(i + 1, 4) & "-" & Cells(i + 1, 3) Then
ActiveSheet.Cells(i, 17) = Worksheets(14).target.Offset(0, 10)
End If
Else
MsgBox "Unable to find a Match !"
End If
Next i
End Sub
答案 1 :(得分:0)
target
不是Worksheets
对象的属性或方法。
我认为您需要将Worksheets(14).target.Offset(0, 10)
更改为Worksheets(14).Range("A5").Offset(target, 10)
。
您的编码也应该保持一致。在您的代码中,您有ActiveSheet.Cells(i + 1, 6) & "-" & Cells(i + 1, 5) ...
之类的内容,您可以在Cells(i + 1, 6)
上明确限定ActiveSheet
,但允许Cells(i + 1, 5)
默认为ActiveSheet
。虽然它有效但如果您以后需要重新阅读代码,它将会变得非常混乱。