2012-12-17 79 views
1

好的,所以我編寫了一個宏,在從我編寫的工作簿啓動時工作正常。但是,我需要宏能夠跨各種工作簿工作。VBA Excel 2003獨立於特定工作簿的宏

我已將宏移至隱藏的「個人」工作簿,但是,現在當代碼引用「ThisWorkBook」時,是的,它指向個人工作簿。

我曾經想過創建一個工作簿變量並指向工作簿的地址/名稱......但這有所不同(工作簿由系統生成,並且工作簿的名稱取決於時間/生成日期)。

作爲參考,我想在Excel的工具欄上放一個按鈕,當用戶點擊它時,它會運行這個宏。也許,有沒有辦法獲得調用宏的工作簿的名稱?

謝謝, 山姆。

+0

嗨,所以現在你有2個工作簿,其中一個隱藏着宏(讓我們將其命名爲A),另一個可見,讓我們將其命名爲B. 所以你想調用宏中的A ? – Larry

+0

嘿拉里, 就是這樣。爲了給你更多的背景: 我們有一個系統輸出一個電子表格,裏面裝滿了數據(A),另一個電子表格裏面有一系列公式(B)。目前,用戶必須通過A,複製正確的字段並將它們粘貼到B. 我已經編寫了一個可以自動執行此過程的宏,因此他們現在打開A,點擊快捷方式,宏定位並打開B,然後在A中找到相關數據並將其粘貼到B. –

+0

對不起仍然有點不清楚的情況和你想要什麼,我們可以繼續討論http://chat.stackoverflow.com/rooms/info/21244/http-stackoverflow-com-questions-13909747-vba -excel-2003-macro-independent-from?tab = general? – Larry

回答

1

如果有工作簿A(數據工作簿),你可以做以下更改 識別工作簿中

Dim wbA As Workbook 'workbook A (the data workbook) 
Dim wb As Workbook 

For Each wb In Workbooks 'loop through all opened workbooks, matching the name 
    If InStr(wb.Name, "ABC") > 0 Then 
     Set wbA = wb 
     Exit For 
    End If 
Next wb 

然後由WBA

+0

偉大的解決方案,謝謝! –

3

有取代「的ThisWorkbook」的命名約定有效的命令,它將允許您引用代碼被調用的工作簿和工作表。

ActiveCell 
ActiveChart 
ActiveEncryptionSession 
ActivePrinter 
ActiveProtectedViewWindow 
ActiveSheet 
ActiveWindow 
ActiveWorkbook 

Application對象

0

你也可以使用,而不是一個宏觀VBS的所有屬性。語言幾乎完全相同,您的腳本將獨立於您的工作簿。

至於確定使用哪個文件來運行宏(沒有數據和代碼的例子,它很難太具體),你可以瀏覽你想要的文件。

Dim objShell 
Set objShell = CreateObject("Shell.Application") 

Dim strFileName 
Dim strFilePath 

Dim dPicker 
Set dPicker = objShell.BrowseForFolder(0, "Choose a file:", &H4000) 

strFilePath = dPicker.self.Path 'will give you the file path of the file you choose, 
           'which you can then use to open/access the file with 
           'the data you need. 

'Code 

Set dPicker = Nothing 

如果您想堅持一個宏,您可以檢出FileDialog對象以使用VBA中的文件選取器。

要獲得VBA打開的工作簿的文件名和/或路徑,使用

ActiveWorkbook.Name 
ActiveWorkbook.Path 

希望這有助於!

0

只需將「ThisWorkbook」替換爲「ActiveWorkbook」即可。

相關問題