我正在尝试将Vlookup公式输入到名为“FY_16”的工作表的S列中。我需要用户选择公式的“表格数组”所在的文件(每月更改一次)。
每个月文件都会更改,但我想要查看的列将始终相同 - 列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是我想要查看的列(整个列)
我使用这些表名但是无法正确获取语法(可能因为公式代码的其余部分也不正确)。
任何帮助将不胜感激。如果需要澄清,请告诉我。
麦克
答案 0 :(得分:2)
在未打开的工作簿中访问范围的正确语法看起来像'C:\Temp\[Book2.xlsx]PA Rev'!R1C23:R900000C23
。这不会是来自UseFileDialogOpen
函数的格式。
您也无法在myString
子例程中使用Vlookup
,因为您已将该变量定义为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)"