2016-07-26 84 views
1

我正在製作一個宏excel 2010,我的目標是每個人都可以將這個宏用於自己的工作。所以我必須使它非常靈活。如何通過當前工作簿中單元格的內容來引用另一個工作簿?

每個人的名字自己的工作簿(我已經在宏使用的ThisWorkbook解決了這個),但每個人的名字也是自己提取文件(從那裏新的數據來源)。

但是,幾乎沒有人知道如何使用VBA,因此無法每次在代碼中調整此引用。

因此,我添加了一個新的工作表:「個性化」

在這裏,人可以在特定的細胞添加提取文件的名稱。

可惜我不知道如何打開在當前工作簿中的特定單元的名稱的工作簿。

我試過了,例如,Windows("ThisWorkbook.Sheets("Personalize").Range("B3")").Activate但沒有奏效。

與可以命名爲不同的工作表相同,我不知道如何在不使用VBA的情況下在宏中調整它們。

有沒有人有任何想法或建議?

非常感謝你提前!

親切的問候,

亨德里克

+0

您是否正在嘗試打開工作簿或工作表?您的代碼顯示您想要打開工作表,但不斷說工作簿。 – tjb1

+0

我嘗試打開工作簿,但該工作簿的名稱發生更改。用戶應該能夠在當前工作簿的某個單元格中寫入其他工作簿的名稱。因此,宏應該考慮「我必須打開與該文本中文本相同的文件名的工作簿,例如,此工作簿的單元格A3」。我不知道如果我對這個解釋更清楚嗎?... – Hendrik

回答

0

如果要打開已結束營業,你需要完整的路徑工作簿:如果要激活一個已經打開的工作簿

dim wkb as workbook 
dim wbPath as String 

wbPath = ThisWorkbook.Sheets("Personalize").Range("B3").value 
Set wkb = Workbooks.Open(wbPath) 

,你不需要完整路徑,但需要工作簿的名稱(如「Workbook1.xlsx」)。爲此,您可以達到「Workbook1.xlsx」之前剃去路徑(或者,如果工作簿總是會先開,只是讓他們直接進入工作簿的名稱,並跳過取出路徑的其餘部分):

dim wbname as String 

wbname = ThisWorkbook.Sheets("Personalize").Range("B3").value 
Do until Instr(wbname, "\") = 0 
    wbname = Mid(wbname, instr(wbname, "\") + 1) 'I didn't test this, just going off the top of my head 
Loop 

Workbooks(wbName).Activate 

請務必妥善處理您的錯誤。作爲參考:VBA Excel simple Error Handling

測試當您嘗試輸入不正確的名稱時會發生什麼,例如。您想用適當的消息框處理這些錯誤,或者用戶可能覺得您的程序無法正常工作。

+0

B3中的值需要包含文件的完整路徑,對嗎? – tjb1

+0

在第一種情況下,是的。由於工作簿已關閉,代碼必須找到它的保存位置。在第二種情況下,不,它確實是工作簿的名稱。所以你可以讓他們放置路徑並使用一些字符串操作來在'name.xlsm'之前刪除所有的東西。我可以添加到我的答案。 –

+0

「在這裏,人員可以在特定單元格中添加提取文件的名稱。」 - 我只是提到,因爲在問題中提及名稱和無路徑,不知道亨德里克是否知道這是必需的。 – tjb1

相關問題