1

我有从单元格 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)
4

1 回答 1

0

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

  • 您确保在您搜索的字符串周围有双引号。
  • 使用正确的参数分隔符(,而不是;
  • 如果您使用 r1c1 表示法

可以在此处找到有关上述内容的一些信息

您可以检查以下输出:

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)")

请注意,在 r1c1 表示法中引用整个列范围可能会很棘手,所以也许您可以将行更改为 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))")
于 2019-09-02T11:48:42.403 回答