Vlookup 或其他方法从关闭的 excel 文档中获取信息
Vlookup or another method to get info from closed excel document
我有单元格 A1 到 A20 的值。我想 Vlookup
他们每个人都从一个关闭的 Excel 文件中获取相应的值。我找到了一些可行的方法,但我不想打开任何文件,即使它保持隐藏状态,也不想在任何单元格中将 Vlookup
作为公式写入。
我尝试了 Application.WorksheetFunction.VLookup
和 ExecuteExcel4Macro
方法。
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 行,我相信使用 INDEX
和 MATCH
组合会更快。在那种情况下,代码可能看起来更长一些但应该更快:
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))")
我有单元格 A1 到 A20 的值。我想 Vlookup
他们每个人都从一个关闭的 Excel 文件中获取相应的值。我找到了一些可行的方法,但我不想打开任何文件,即使它保持隐藏状态,也不想在任何单元格中将 Vlookup
作为公式写入。
我尝试了 Application.WorksheetFunction.VLookup
和 ExecuteExcel4Macro
方法。
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 行,我相信使用 INDEX
和 MATCH
组合会更快。在那种情况下,代码可能看起来更长一些但应该更快:
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))")