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

时间:2017-01-26 20:40:10

标签: excel vba excel-vba

我正在尝试将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是我想要查看的列(整个列)

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

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

麦克

1 个答案:

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