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

Vlookup或从关闭的excel文档获取信息的其他方法,excel,vba,vlookup,Excel,Vba,Vlookup,我有从单元格A1到单元格A20的值。我想对它们中的每一个进行Vlookup,以便从一个关闭的excel文件中获得相应的值。我找到了一些可行的方法,但我不想打开任何文件,即使它保持隐藏状态,也不想在任何单元格中以公式形式编写Vlookup 我尝试了Application.WorksheetFunction.VLookup和ExecuteExcel4Macro方法 1-这是一个工作示例:,但我无法将其更改为与Vlookup一起工作 wbPath = "c:\users\fatihmi\Deskt

我有从单元格A1到单元格A20的值。我想对它们中的每一个进行Vlookup,以便从一个关闭的excel文件中获得相应的值。我找到了一些可行的方法,但我不想打开任何文件,即使它保持隐藏状态,也不想在任何单元格中以公式形式编写Vlookup


我尝试了Application.WorksheetFunction.VLookupExecuteExcel4Macro方法


1-这是一个工作示例:,但我无法将其更改为与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
Application.InputBox(prompt:="Enter range", Type:=8)
有可能通过InputBox获得范围,但我不知道如何使用原始范围数据,就像在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
Application.InputBox(prompt:="Enter range", Type:=8)

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

  • 确保搜索的字符串周围有双引号
  • 使用正确的参数分隔符(
    isntead of
  • 如果使用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行,我相信使用
索引
匹配
组合会更快。在这种情况下,代码可能看起来更长一些,但应该更快:

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

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

  • 确保搜索的字符串周围有双引号
  • 使用正确的参数分隔符(
    isntead of
  • 如果使用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行,我相信使用
索引
匹配
组合会更快。在这种情况下,代码可能看起来更长一些,但应该更快:

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

你不能那样做。您需要打开源文件。您可以打开源文件,在数组中输入数据,然后执行vlookup。但你总是需要打开它,即使它只是短暂的一秒钟。“我不想打开任何文件,即使它保持隐藏”-为什么?@Damian事实上很有可能(如果我理解这个问题)你就是做不到。您需要打开源文件。您可以打开源文件,在数组中输入数据,然后执行vlookup。但是你总是需要打开它,即使它只是短暂的一秒钟。“我不想打开任何文件,即使它保持隐藏”-为什么?@Damian事实上很有可能(如果我理解这个问题)谢谢你的正确方法。我想我可以把我的工作限制在5000行。你知道ExecuteExcel4Macro方法是如何工作的吗,我是说在算法中?@Oremdon,我不知道你说的是什么意思。我编辑的答案是否符合你的意思?索引和匹配组合现在不起作用,但我能找到答案。非常感谢。我之前的帖子只是一个不同的问题。谢谢你的正确方法。我想我可以把我的工作限制在5000行。你知道ExecuteExcel4Macro方法是如何工作的吗,我是说在算法中?@Oremdon,我不知道你说的是什么意思。我编辑的答案是否符合你的意思?索引和匹配组合现在不起作用,但我能找到答案。非常感谢。我之前的帖子只是一个不同的问题。