2017-08-15 45 views
0

我有很多數據文件要用作源文件。但是當我使用組合框選擇文件名時,我想從這些文件中獲取選定的數據。見附圖。當我從下拉列表中選擇貨運編號時,我想從具有相同編號的文件中獲取一些數據。我用下面的代碼來做到這一點。如何使用變量引用excel中的已關閉工作簿

enter image description here

Sub GetDataFromClosedBook() 
Dim SO As String 
Dim Qty As String 
Dim ID As String 

ID = Worksheets("Sheet1").Cells(1, "O").Value 
MsgBox (ID) 
'data location & range to copy 
SO = "='D:\Excel Software\Shipment Tracking\[7811.xlsx]Shipment - 7811 - Connected Ord'!$A$1:$C$50" 
Qty = "='D:\Excel Software\Shipment Tracking\[7811.xlsx]Shipment - 7811 - Connected Ord'!$I$1:$I$50" 
'link to worksheet 
With ThisWorkbook.Worksheets(1).Range("A1:C50") 
.Formula = SO 
'convert formula to text 
.Value = .Value 

End With 

With ThisWorkbook.Worksheets(1).Range("E1:E50") 
.Formula = Qty 
'convert formula to text 
.Value = .Value 

End With 
End Sub 

現在我想使用 「ID」 變量的文件名和表名稱。我怎樣才能做到這一點。

回答

1

未經測試:

Sub GetDataFromClosedBook() 

    Const FILE_INFO As String = "='D:\Excel Software\Shipment Tracking\" & _ 
           "[<id>.xlsx]Shipment - <id> - Connected Ord'!" 
    Dim SO As String 
    Dim Qty As String 
    Dim ID As String, fn 

    ID = Worksheets("Sheet1").Cells(1, "O").Value 
    'replace ID in file/sheet path 
    fn = Replace(FILE_INFO, "<id>", ID) 

    'data location & range to copy 
    SO = fn & "$A$1:$C$50" 
    Qty = fn & "$I$1:$I$50" 
    'link to worksheet 
    With ThisWorkbook.Worksheets(1).Range("A1:C50") 
     .Formula = SO 
     'convert formula to text 
     .Value = .Value 
    End With 

    With ThisWorkbook.Worksheets(1).Range("E1:E50") 
     .Formula = Qty 
     'convert formula to text 
     .Value = .Value 
    End With 

End Sub 

編輯:新增一個筆記,因爲我不知道的Excel這樣做......

如果引用的文件中沒有找到您的公式中的工作表名稱,並且該文件只有一個工作表,Excel會自動將公式中的工作表名稱更改爲文件中工作表的名稱。它不會提醒你這個事情,所以如果表單的名稱真的需要匹配,你需要找到一種方法來檢測發生的事情。

如果沒有匹配且源文件大於1張,則Excel會提示您應該使用哪張紙。

+0

這段代碼編譯得很好。但範圍A1到C5的值顯示爲「#Value」。沒有顯示正確的值。你可以請給我一個幫助 –

+0

適合我工作 - 源文件中的數據是否可以? –

+0

它運作良好。感謝https://stackoverflow.com/users/478884/tim-williams –

相關問題