我想在索引匹配公式中使用工作簿和工作表变量名。
索引匹配公式是在第一个工作簿的B列中查找匹配列值,并将匹配列值返回到第二个工作簿的G列,以Excel公式编写:
=INDEX(SecondWorkbook.NamedWorksheet2.Range("B3:B" & NamedWorksheet2_LASTROW), MATCH(FirstWorkbook.NamedWorksheet2.Range("F3:F" & NamedWorksheet1_LASTROW), SecondWorkbook.NamedWorksheet2("A3:A" & NamedWorksheet2_LASTROW), 0))
然而,当引用第一和第二工作簿作为索引匹配公式中的变量名时,我收到了一个错误。
下面是我的代码:
Sub TEST()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim FirstWorkbookPath
FirstWorkbookPath = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*")
Dim SecondWorkbookPath
SecondWorkbookPath = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*")
Dim FirstWorkbook As Workbook
Set FirstWorkbook = Workbooks.Open(FirstWorkbookPath)
Dim SecondWorkbook As Workbook
Set SecondWorkbook = Workbooks.Open(SecondWorkbookPath)
Dim FirstWorkbook_LASTROW_X, FirstWorkbook_LASTCOL_X As Long
FirstWorkbook_LASTROW_X = FirstWorkbook.Sheets(2).Range("A" & Rows.Count).End(xlUp).Row
FirstWorkbook_LASTCOL_X = FirstWorkbook.Sheets(2).Range("A1").CurrentRegion.Columns.Count
Dim SecondWorkbookNamedWorksheet As Worksheet
Set SecondWorkbookNamedWorksheet = SecondWorkbook.Sheets(5)
Dim SecondWorkbook_LASTROW, SecondWorkbook_LASTCOL As Long
SecondWorkbook_LASTROW = SecondWorkbook.Sheets(5).Range("A" & Rows.Count).End(xlUp).Row
SecondWorkbook_LASTCOL = SecondWorkbook.Sheets(5).Range("A1").CurrentRegion.Columns.Count
With Application
.Calculation = xlCalculationManual
.EnableAutoComplete = False
End With
FirstWorkbook.Sheets(3).Range("G3:G" & FirstWorkbook_LASTROW_X).Formula = _
"=INDEX('[" & SecondWorkbook & "]" & SecondWorkbookNamedWorksheet & "'!R2C2:R" & SecondWorkbook_LASTROW & "C2,MATCH(RC[-1],'[" & SecondWorkbook & "]" & SecondWorkbookNamedWorksheet & "'!R2C1:R" & SecondWorkbook_LASTROW & "C1,0))"
With Application
.Calculation = xlCalculationManual
.EnableAutoComplete = False
End With
FirstWorkbook.Close SaveChanges:=False
SecondWorkbook.Close SaveChanges:=False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
错误是由于在VBA公式中引用了工作簿和工作表变量名。
有人知道如何解决这个问题吗?
非常感谢!
2条答案
按热度按时间yyyllmsg1#
范围。公式属性可以用A1表示法设置。看起来你使用的是R1C1符号。尝试设置范围。公式R1C1性质。
https://learn.microsoft.com/en-us/office/vba/api/excel.range.formula
https://learn.microsoft.com/en-us/office/vba/api/excel.range.formular1c1
iih3973s2#
至少,您需要使用对工作簿和工作表名称的(字符串)引用,而不是对对象本身的引用。
为此,请使用工作簿和工作表的
Name
属性。更改此:
FirstWorkbook.Sheets(3).Range("G3:G" & FirstWorkbook_LASTROW_X).Formula = _ "=INDEX('[" & SecondWorkbook & "]" & SecondWorkbookNamedWorksheet & "'!R2C2:R" & SecondWorkbook_LASTROW & "C2,MATCH(RC[-1],'[" & SecondWorkbook & "]" & SecondWorkbookNamedWorksheet & "'!R2C1:R" & SecondWorkbook_LASTROW & "C1,0))"
对此:
FirstWorkbook.Sheets(3).Range("G3:G" & FirstWorkbook_LASTROW_X).Formula = _ "=INDEX('[" & SecondWorkbook.Name & "]" & SecondWorkbookNamedWorksheet.Name & "'!R2C2:R" & SecondWorkbook_LASTROW & "C2,MATCH(RC[-1],'[" & SecondWorkbook.Name & "]" & SecondWorkbookNamedWorksheet.Name & "'!R2C1:R" & SecondWorkbook_LASTROW & "C1,0))"
您可能会发现还需要将LASTROW引用 Package 在
CStr()
中,以便将数字正确转换为字符串,而不使用前导空格。再一次,这是你需要做的最低限度。