Vlookup 或其他方法从关闭的 excel 文档中获取信息

Vlookup or another method to get info from closed excel document

我有单元格 A1 到 A20 的值。我想 Vlookup 他们每个人都从一个关闭的 Excel 文件中获取相应的值。我找到了一些可行的方法,但我不想打开任何文件,即使它保持隐藏状态,也不想在任何单元格中将 Vlookup 作为公式写入。

我尝试了 Application.WorksheetFunction.VLookupExecuteExcel4Macro 方法。

1 - 这是一个工作示例:ExecuteExcel4Macro to get value from closed workbook,但我无法更改它以使用 Vlookup

wbPath = "c:\users\fatihmi\Desktop\"
wbName = "Ornek.xlsx"
wsName = "Sheet1"

MsgBox ExecuteExcel4Macro("VLOOKUP(" & "testString" & ";" & "'" & wbPath & "[" & wbName & "]" & wsName & "'!$C:$E;3;FALSE)")

2 - 我不知道如何通过 Application.WorksheetFunction.VLookup 引用或使用已关闭的文档。

Dim wk As Workbooks
Set wk = "c:\users\fatihmi\Desktop\Ornek.xlsx"
Dim ws As Worksheet
Set ws = wk.Sheets("Sheet1")
Dim wr As Range
Set wr = ws.Range("C:E")
        
result = Application.WorksheetFunction.VLookup("testString", wr, 3, False)
MsgBox result

有可能通过 InputBox 获取范围,但我不知道如何使用代码中的原始范围数据 Application.WorksheetFunction.VLookup

Application.InputBox(prompt:="Enter range", Type:=8)

您在 ExecuteExcel4Macro 上犯了一些错误。它应该在以下情况下工作:

  • 您确保用双引号将您搜索的字符串括起来。
  • 使用正确的参数定界符(, 不是 ;
  • 如果您使用 r1c1 表示法

上面的一些资料可以查到here

您可以检查以下输出:

Debug.print "VLOOKUP(" & """testString""" & "," & "'" & wbPath & "[" & wbName & "]" & wsName & "'!r1c3:r20c5,3,FALSE)"

所以代码应该是:

wbPath = "c:\users\fatihmi\Desktop\"
wbName = "Ornek.xlsx"
wsName = "Sheet1"

MsgBox ExecuteExcel4Macro("VLOOKUP(" & """testString""" & "," & "'" & wbPath & "[" & wbName & "]" & wsName & "'!r1c3:r20c5,3,FALSE)")

Note, refering to whole columns range can be tricky in r1c1 notation, so maybe you can suffice in changing the row to like 1000?


编辑

如果您有 1000 行,我相信使用 INDEXMATCH 组合会更快。在那种情况下,代码可能看起来更长一些但应该更快:

wbPath = "c:\users\fatihmi\Desktop\"
wbName = "Ornek.xlsx"
wsName = "Sheet1"

MsgBox ExecuteExcel4Macro("INDEX('" & wbPath & "[" & wbName & "]" & wsName & "'!r1c5:r5000c5" & ",MATCH(" & """testString""" & ",'" & wbPath & "[" & wbName & "]" & wsName & "'!r1c3:r5000c3,0))")