2016-09-07 82 views
0

我有一個包含96個xls文件的中央位置;這些96個文件的代表設在這裏單獨的測試:使用文件名在單元格中關閉工作簿的Excel單元格引用

「\服務器5 \操作\主板測試中心位置不要刪除或重命名」

我創建一個Excel工作簿中輸入每個測試的全部信息放在一張紙上。然後,我使用VBA來拉取文件的名稱,並在同一工作簿的第二張表上添加一個鏈接到該文件。我將這些文件鏈接到工作表1上。

接下來,我在每個工作簿(測試)的單行中添加了與執行測試相對應的首行上的所有信息。

現在我需要填充的新的工作簿表1(高級主板測試log.xlsx)

到目前爲止,這個公式的工作,但僅限於打開的工作簿:

=INDIRECT("'\\server5\Operations\MainBoard testing central location DO NOT REMOVE or RENAME\["&A7&"]Summary'!$E9") 

其中A7代表文件名從A6範圍列於A103

摘要E9是我想在小區C7進入細胞

Excel capture of C7

請注意填充的值,這是因爲我打開了2本工作簿,所有#REF!單元格包含與填充單元格相同的公式。

請讓我知道如果你需要任何額外的信息來完成這項繁瑣的任務

我也想這樣做微軟推薦的方法:

='[20160613 1002257 35000010-01B.xls]Summary'!$E9 

替換電池包含文件名文件名:

='["&A7&"]Summary'!$E9 

我得到#REF!在單元格和公式欄中自動更改爲:

='(\\server5\Operations\MainBoard testing central location DO NOT REMOVE or RENAME\["&A7&"]Summary'!$E9 
+0

檢查http://stackoverflow.com/questions/28461672/how-to-referencing-value-in-closed-excel-workbook-by-formula-incl-variable-shee – elijah

+0

*迄今爲止這個公式的作品,但僅用於打開工作簿* - 如果您打開已關閉的工作簿,那麼對他們有用嗎? –

+0

是的,它只在打開時才起作用,但只要關閉源工作簿並且目標工作簿刷新值消失,只要關閉它並且工作簿刷新值就會消失 – Allan

回答

2

根據Microsoft的說法,Indirect()函數必須打開工作簿。您可以使用VBA循環訪問目錄以獲取使用此路由的單元格值。

得到了UDF以下是如何你添加它:在Excel

  • 打開Visual Basic編輯器(功能區的開發選項卡 - 你可能需要去到Excel選項,取消隱藏)。

  • 右鍵單擊VBA項目([您的工作簿名稱]),突出顯示插入,然後單擊模塊。

  • 將下面的內容粘貼到module1中,並將工作簿另存爲.xlsm。

代碼:

Function GetField(Path As String, WorksheetName As String, CellRange As String) As Variant 

    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim rng As Range 

    Set wb = GetObject(Path) 
    Set ws = wb.Worksheets(WorksheetName) 
    Set rng = ws.Range(CellRange) 

    Application.DisplayAlerts = False 
    wb.Saved = True    
    wb.Close SaveChanges:=False 
    Application.DisplayAlerts = True 
End Function 

然後,您可以在僅此工作簿中使用= getfield命令()。

參數: = getfield命令( 「\服務器5 \操作\主板測試中心位置不要刪除或重命名\」 & A6, 「摘要」, 「E9」)

只有一個文件進行測試,但你應該能夠在行/列中使用多個單元格引用,文件名等。

-Confirmed這部作品在多個行/列

編輯:改變工作簿如何根據Alistair Weir在另一個問題提供了一些代碼關閉。

+0

。我會寫一個VBA,但我的技能是在lvl 1/10 – Allan

+0

@Kevin我建議你補充一點,在morefunc.xll中有一個名爲INDIRECT.EXT的函數或稱爲PULL的UDF宏,它將執行OP所要求的操作。 – Andreas

+0

正確,一旦它離開內存Indirect()將會再次計算,因爲它是不穩定的。我正在考慮一個簡單的UDF函數,而不是一個更大的循環。 – Kevin

相關問題