2012-07-18 108 views
1

我一直在嘗試使用VBA將VLookup公式插入到列中。 Table_array是可變的並且每個月都在變化,所以我想要一個對話框來指定我想要使用的文件。該Table_array是相同的格式每個月和我的公式至今如下:VBA VLookup允許用戶選擇目錄上的文件名

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列。

回答

3

GetOpenFileName不會返回一個對象。因此,你不能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 
+0

+ 1是的,這將有助於。但是'GetOpenFileName'不一定會返回一個字符串。 – 2012-07-18 16:23:19

+0

謝謝悉達思,我已經稍微糾正了我的答案 – JMax 2012-07-18 17:26:33

0

您已聲明MyFile爲範圍,但您試圖在var中添加一個文件名。 GetOpenFileName函數返回文件名,但不打開該文件。您必須將文件名保存爲字符串變量,然後使用該文件名打開工作簿。

相關問題