在不同的用户select的文件VBAmacros的Vlookup表上

我正在尝试在名为“FY_16”的工作表的S列中inputVlookup公式。 我需要用户select文件(每月更改)公式的“表格数组”。

每个月文件都会改变,但是我想要查找的列总是相同的 – 列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:应用程序定义或对象定义”消息。

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

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

  .Range(Cells(2,23), Cells(90000,23)) 

但我不知道如何使用与保存所选文件名的variables。

另外,我使用的是90000行,因为这个数据每个月都会超过我的数据(通常行数大约是75000)。 我宁愿find确切的行号,但我不相信这可以做到不打开用户select的“目标文件”。 如果有办法做到这一点,请提供任何build议!

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

非VBA查找如下所示:

 =VLOOKUP(Q2,'TargetFile.xlsb'!REV[[#All],[Net New Match]],1,FALSE) 

TargetFile是用户select的文件REV是表格数组在Net上的工作表New Match是我要查找的列(整列)

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

任何帮助将不胜感激。 让我知道是否需要澄清。

麦克风

在未打开的工作簿中访问范围的正确语法将看起来像'C:\Temp\[Book2.xlsx]PA Rev'!R1C23:R900000C23 。 这不会是从UseFileDialogOpen函数来的相同的格式。

你也不能在你的Vlookup子程序中使用myString ,因为你定义的variables是UseFileDialogOpen本地variables – 但是你可以使用你用来存储UseFileDialogOpen结果的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)"