我无法在下面列出的子目录中找到我的错误。我收到“运行时错误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
答案 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))
顺便说一下,SHEET1NAME
和SHEET2NAME
是什么?只是名称或工作表对象?所有上述都认为它们是Worksheet对象,但我想运行时错误是抱怨这些只是名称而不是对象!在这种情况下,请使用Worksheets(SHEET1NAME)
和Worksheets(SHEET2NAME)
替换它们。