【问题标题】:Object doesn't support this property or method对象不支持此属性或方法
【发布时间】:2017-02-02 17:51:48
【问题描述】:

我实际上是在尝试匹配 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

【问题讨论】:

  • 哪一行报错?

标签: vba excel


【解决方案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 只是建议更改以使代码更像您自己的风格,甚至没有尝试修复 OP 的错误。 (如果您选择解决 OP 的问题,请告诉我,我将反转 dv。)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 2015-07-02
    • 2019-04-09
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多