运行时错误424需要对象

时间:2017-02-01 03:10:30

标签: excel vba excel-vba

我无法在下面列出的子目录中找到我的错误。我收到“运行时错误424对象必需”消息。

我的目的是将我的excel公式转换为VBA代码。

Private Sub Workbook_INDEXMATCH()

    Dim wb As Workbook, wb1 As Workbook
    Dim LastRow As Long
    Set wb = Workbooks("WORKBOOK.xlsm")

    With Application.WorksheetFunction
        SHEET1NAME.Range("E13") = _
        .Index(SHEET2NAME.Range("D:D"), .Match(lookup_value, SHEET1NAME.Range("B13"), 0), .Match(lookup_value, SHEET2NAME.Range("A:A"), 0))

    End With
End Sub

1 个答案:

答案 0 :(得分:2)

当您在单维数组中编制索引时,为Index设置两个参数是没有意义的。

.Index(SHEET2NAME.Range("D:D"), .Match(lookup_value, SHEET2NAME.Range("A:A"), 0))

此外,

  

.Match(lookup_value, SHEET1NAME.Range("B13"), 0)

没有意义,因为你在这里搜索一个单元格。你想打算在第13行搜索吗?

.Match(lookup_value, SHEET1NAME.Range("13:13"), 0)

但是,仅当您在二维范围内建立索引时,才会使用Index的2个参数。但是你需要反转你给Index的第二个和第三个参数,因为第二个参数是一个行索引,它在一个列中获取,而第三个参数是在该行中获取的一个列索引。

例如,假设您要查找范围为A1:D20的单元格,其中lookup_value出现在A列(同一行)和第13行(同一列) ):

myVariable = .Index(SHEET2NAME.Range("D:D"), _
    .Match(lookup_value, SHEET2NAME.Range("A:A"), 0), _
    .Match(lookup_value, SHEET1NAME.Range("13:13"), 0))

顺便说一下,SHEET1NAMESHEET2NAME是什么?只是名称或工作表对象?所有上述都认为它们是Worksheet对象,但我想运行时错误是抱怨这些只是名称而不是对象!在这种情况下,请使用Worksheets(SHEET1NAME)Worksheets(SHEET2NAME)替换它们。