VBA VLookup允许用户选择目录上的文件名

时间:2012-07-18 15:29:58

标签: excel vba excel-vba lookup

我一直在尝试使用VBA将VLookup公式插入到列中。 Table_array是变量并且每个月都会更改,所以我想要一个对话框来指定我想要使用的文件。 Table_array每个月的格式相同,到目前为止我的公式如下:

Sub VlookupMacro()

Dim FirstRow As Long
Dim FinalRow As Long
Dim myValues As Range
Dim myResults As Range
Dim myFile As Range
Dim myCount As Integer

Set myFile = Application.GetOpenFilename("Excel Files (*.xls), *.xls")

Set myValues = Application.InputBox("Please select the first cell in the column with the values that you're looking for", Type:=8)

Set myResults = Application.InputBox("Please select the first cell where you want your lookup results to start ", Type:=8)

Range(myResults, myResults.Offset(FinalRow - FirstRow)).Formula = _
    "=VLOOKUP(" & Cells(FirstRow, myValues.Column) & ", myFile.value($A$2:$B$U20000), 5, False)"

If MsgBox("Do you want to convert to values?", vbYesNo) = vbNo Then Exit Sub

Columns(myResults.Column).Copy
Columns(myResults.Column).PasteSpecial xlPasteValues
Application.CutCopyMode = False 

End Sub

我在代码没有经过Set = myFile行的那一刻遇到'myFile'问题。任何建议或修改都是最受欢迎的。除此之外,变量文件永远不会超过20000行(这就是为什么我已经修改了公式中的范围),我们将始终选择第5列。

2 个答案:

答案 0 :(得分:3)

GetOpenFileName不会返回Object。因此,您不能Set价值。

尝试:

FileName = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Please select a file") 
If FileName = False Then 
     ' User pressed Cancel
    MsgBox "Please select a file" 
    Exit Sub
Else 
    Workbooks.Open Filename:=FileName  
End If 

答案 1 :(得分:0)

您已将MyFile声明为范围,但您尝试在var中添加文件名。 GetOpenFileName函数返回文件名,但不会打开文件。您必须将文件名保存到字符串变量,然后使用该文件名打开工作簿。