2017-07-17 109 views
0

我想創建一個將字符串作爲輸入的函數,在vlookup中使用此字符串作爲參數以從已關閉的工作簿中獲取值。在VBA中引用一個已關閉的工作簿的Vlookup

下面的代碼工作時的數據和字符串中的同一工作表都是:

Function get_value(inputString as String) 

    Dim dataRange as Range 

    Set dataRange = Range("A1:B4") 

    get_value = Application.WorksheetFunction.Vlookup(inputString, dataRange, 2, False) 

End Function 

簡單的引用的範圍(如下面的代碼)不工作(我認爲這是因爲功能無法處理Workbooks.Open就像Subs)。

Set workbookVariable = Application.Workbooks.Open(path_to_file) 

dataRange = workbookVariable.Sheets(1).Range("A1:B4") 

我的表(保存爲 'names.xls',保存在桌面)的樣子:

  A  |  B 
    1 Olivia |  Spaghetti 
    2 John  |  Steak 
    3 Samuel |  Rice 
    4 Brian  |  Chicken 

我希望要一個函數調用,如:

=的get_value(A1)和那會在A1中返回名字的食物。

如何調整我的代碼以便get_value也可以在其他工作簿上工作?

+0

這可能會給你一個想法,沒有測試過你。在外部工作簿處於活動狀態時,從'Thisworkbook.Path&Application.PathSeparator&Range(「A1:B4」)。Address(External:= true)''從立即窗口獲取字符串。您可能需要其中的一部分並將連接設置爲該工作簿。 – PatricK

+0

https://stackoverflow.com/a/42800024/4539709 – 0m3r

+0

0m3r,不一樣的問題,我需要一個函數。 –

回答

0
Function auto_open() 

Workbooks.Open ("C:\Users\bmartin598\desktop\name") 

Workbooks("Book2").Activate 
'make this match the workbook this code is in 

End Function 



Function get_value(inputString As String) 

Dim dataRange As Range 

Dim workbookVariable As Workbook 

Dim strVal As Variant 

Set workbookVariable = Workbooks("name") 'change to match workbook name 

Set dataRange = workbookVariable.Sheets(1).Range("A1:B4") 

strVal = Workbooks("name").Sheets("Sheet1").Range(inputString).Value 
'make sure workbooks matches the name of your workbook 

get_value = WorksheetFunction.VLookup(strVal, dataRange, 2, False) 


End Function 

Function auto_close() 
Workbooks("name").Close 
End Function 

您可以使用此作爲解決方法。它會自動打開另一個工作簿,只要這個工作簿打開並放在後臺。當您關閉工作簿時,您也正在參考工作簿中關閉工作簿。

希望這會有所幫助。

+0

仍然不起作用,它很奇怪,適合你。我懷疑我的問題是由於函數的限制。(https://stackoverflow.com/questions/7693530/excel-vba-cant-open-workbook) –

+0

代碼失敗的地方在哪裏?你使用什麼版本的Excel? – bmartin598

+0

函數返回#VALUE!任何輸入。運行Mac 15.33(2017)和Excel 2010(windows)的Excel。 –

相關問題