对象不支持此属性或方法

时间:2017-02-02 17:51:49

标签: excel vba excel-vba

我基本上试图匹配来自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

2 个答案:

答案 0 :(得分:1)

如果要查找行计数,则需要使用以下语法: rowcount = Range(Range("E2"), Range("E2").End(xlDown)).Rows.Count,使用LongInteger更好。

此外,如果无法使用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。虽然它有效但如果您以后需要重新阅读代码,它将会变得非常混乱。