Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vlookup到不同用户选择的VBA宏文件上的表_Vba_Excel - Fatal编程技术网

Vlookup到不同用户选择的VBA宏文件上的表

Vlookup到不同用户选择的VBA宏文件上的表,vba,excel,Vba,Excel,我试图在名为“FY_16”的工作表的S列中输入Vlookup公式。我需要用户选择公式的“表数组”所在的文件(每个月都会更改) 每个月文件都会更改,但我要查找的列始终是相同的—W列(但行数不同)。公式将查找的“表数组”是表的一部分 我的代码如下: Private Function UseFileDialogOpen() MsgBox ("When the browse window opens: please select the previous months published FY16 Co

我试图在名为“FY_16”的工作表的S列中输入Vlookup公式。我需要用户选择公式的“表数组”所在的文件(每个月都会更改)

每个月文件都会更改,但我要查找的列始终是相同的—W列(但行数不同)。公式将查找的“表数组”是表的一部分

我的代码如下:

Private Function UseFileDialogOpen()
MsgBox ("When the browse window opens: please select the previous months published FY16 Consulting SKU File")

Dim myString As String
' Open the file dialog
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 1 Then
    myString = .SelectedItems(1)
    'MsgBox myString
    UseFileDialogOpen = myString
Else
    MsgBox ("Failed to properly open file")
    myString = "fail"
    UseFileDialogOpen = myString
End If
End With
End Function

Sub Vlookup
Dim filelocation 'as what?????

filelocation = UseFileDialogOpen()


Worksheets("FY_16").Range("T2:T" & LastRow).FormulaR1C1 = "=vlookup(RC[-3], [" & myString & "] PA Rev!R1C23:R900000C23,1,false)"
我的问题发生在代码的最后一行。我收到一条“运行时错误1004:应用程序定义或对象定义”消息

我知道我的语法在几个方面不适合vlookup。我不确定“&myString&”是否正确,也许这应该是“filelocation”

我也不相信R1C1可以像我在vlookup中那样用来命名一个范围。我通常会使用

  .Range(Cells(2,23), Cells(90000,23))
但我不知道如何将其用于保存所选文件名的变量

此外,我使用90000行,因为这将超过我每个月的数据(通常行数约为75000)。我更愿意找到确切的行号,但我不相信不打开用户选择的“目标文件”就可以做到这一点。如果有办法做到这一点,请提供任何建议

我想知道是否有一种方法可以使用表名来设置表数组

非VBA vlookup如下所示:

=VLOOKUP(Q2,'TargetFile.xlsb'!REV[[#All],[Net New Match]],1,FALSE)
TargetFile是用户选择的文件 REV是表数组所在的工作表 Net New Match是我要查找的列(整个列)

我尝试使用这些表名,但无法获得正确的语法(可能是因为公式代码的其余部分也不正确)

任何帮助都将不胜感激。如果需要任何澄清,请告诉我


Mike

在未打开的工作簿中访问范围的正确语法应该是类似于
'C:\Temp\[Book2.xlsx]PA Rev'!R1C23:R900000C23
。这与
UseFileDialogOpen
函数的格式不同

您也不能在
Vlookup
子例程中使用
myString
,因为您将该变量定义为
UseFileDialogOpen
的本地变量,但您可以使用
filelocation
存储
UseFileDialogOpen
的结果。但是,正如我所说的,它无论如何都不会采用正确的格式,因此需要进行一些重新格式化

以下命令应执行必要的重新格式化:

Worksheets("FY_16").Range("T2:T" & LastRow).FormulaR1C1 = _
     "=vlookup(RC[-3],'" & Left(fileLocation, InStrRev(fileLocation, "\")) & _
     "[" & Mid(fileLocation, InStrRev(fileLocation, "\") + 1) & _
     "]PA Rev'!R1C23:R90000C23,1,false)"

如果您试图在关闭的工作簿上执行
VLOOKUP
,则地址必须类似于
'C:\Temp\[Book2.xlsx]PA Rev'!R1C23:R900000C23
。这与
UseFileDialogOpen
函数的格式不同。(你不能使用
myString
,因为你定义它是
UseFileDialogOpen
本地的,但是你可以使用
filelocation
,你用它来存储
UseFileDialogOpen
的结果。但是,正如我所说,它的格式无论如何都不正确。)@YowE3K谢谢你的输入!除了使用
UseFileDialogOpen
之外,是否还有另一个选项可以以
'C:\Temp\[Book2..
格式返回用户选择的文件,然后可以存储并使用
Vlookup
公式?@YowE3K我在即时窗口中测试,
filelocation
返回
C:\Users\…
格式中的“value”。我的公式现在是:
工作表(“FY_16”).Range(“T2:T”和LastRow)。FormulaR1C1=“=vlookup(RC[-3],“&fileLocation&“]PA Rev!R1C23:R90000C23,1,false)”
这将返回一个运行时1004错误-建议?完全未经测试,但
…=“=vlookup(RC[-3],”左(fileLocation,instrev(fileLocation,“\”)和“[”&Mid(fileLocation,instrev(fileLocation,“\”+1)和“]PA Rev'!R1C23:R90000C23,1,false)”
可能会起作用。等等-我想我遗漏了什么,但是
LastRow
在哪里声明?