2016-04-06 174 views
0

我可能有什麼是一個簡單的問題,但我不明白什麼是錯的。我正在嘗試在Excel中創建一個宏,它將對多個文件執行多項操作。上下文:使用多個工作簿和宏 - 調用工作簿? [VBA]

我運行宏的Excel工作表位於它自己的文件夾中。我已經成立了一個小測試文件夾這樣的結構: C:\用戶\ schris \桌面\ Eprime測試\

  • 此文件夾中有兩個文件夾:

    • \碩士數據集\

      • 在這個文件夾是在Excel中使用宏文件是
    • \ Eprime處理\

      • 有三個文件夾,這個文件夾中,名爲 '恐懼', '性別' 和 '快樂'。在每個文件夾中都有一個我希望打開的excel文件。

我想要做的是創建一個子RunAll將調用各種其他的潛艇,因爲有很多不同的事情,我想宏做的,我想保持它組織。

所以:

Sub RunAll() 
Call OpenWorkbooks 
Call ProcessFear 
Call ProcessGender 
Call ProcessHappy 

End Sub 

這裏是我的OpenWorkbooks代碼:

Sub OpenWorkbooks() 
Dim wb1 As Workbook 
Dim wbFear As Workbook 
Dim wbGender As Workbook 
Dim wbHappy As Workbook 
Dim FileToOpen As Variant 
Dim FileToOpen2 As Variant 
Dim FileToOpen3 As Variant 
Dim Sheet As Worksheet 

' Must be workbook with the Macros I'm running 
Set wb1 = ActiveWorkbook 

' Opens Fear 
ChDir "C:\Users\schris\Desktop\Eprime Testing\Eprime Processing\Fear" 

FileToOpen = Application.GetOpenFilename _ 
(Title:="Please choose Fear file") 

If FileToOpen = False Then 
    MsgBox "No File Specified.", vbExclamation, "ERROR" 
    Exit Sub 
Else 
    Set wbFear = Workbooks.Open(fileName:=FileToOpen) 
End If 

Set wbFear = ActiveWorkbook 

' Opens Gender 
ChDir "C:\Users\schris\Desktop\Eprime Testing\Eprime Processing\Gender" 

FileToOpen2 = Application.GetOpenFilename _ 
(Title:="Please choose Gender file") 

If FileToOpen2 = False Then 
    MsgBox "No File Specified.", vbExclamation, "ERROR" 
    Exit Sub 
Else 
    Set wbGender = Workbooks.Open(fileName:=FileToOpen2) 
End If 

Set wbGender = ActiveWorkbook 

' Opens Happy 
ChDir "C:\Users\schris\Desktop\Eprime Testing\Eprime Processing\Happy" 

FileToOpen3 = Application.GetOpenFilename _ 
(Title:="Please choose Happy file") 

If FileToOpen3 = False Then 
    MsgBox "No File Specified.", vbExclamation, "ERROR" 
    Exit Sub 
Else 
    Set wbHappy = Workbooks.Open(fileName:=FileToOpen3) 
End If 

Set wbHappy = ActiveWorkbook 
End Sub 

現在我希望能夠引用這三個工作簿(wbFear,wbGender,wbHappy)以及它們之間的無縫切換。當在Sub OpenWorkbooks()中測試時,做wbFear.Activate會正常工作和處理......但是當我分離出每個宏的任務時(例如,OpenWorkbooks現在只打開工作簿,ProcessFear只處理Fear工作簿中的數據)得到運行時錯誤'91':對象變量或未設置塊變量。

我假設這與聲明的工作簿名稱「丟失」有關,因爲它切換Subs,但是當我將OpenWorkbooks的代碼放入RunAll並且只有ProcessFear運行時,它仍然無法激活適當的工作簿。

基本上,我的問題是這樣的:

怎樣纔可以有一個宏開三簿,並宣佈所有的東西,其他的宏可以參考?我需要做很多任務,所以我真的想爲每一個都有獨立的Subs,這樣我就不會迷失在代碼中。

謝謝你的時間!

+0

TL;博士,但regarding'declare他們所有的東西,其他的宏可以reference'將它們設置爲您創建的變量...'wb1','wbFear', 'wbGender','wbHappy'。 – findwindow

+0

我設置了作爲這些變量打開的工作簿,但如果我運行不同的子工具,它們將不再工作。 –

+0

哦。宣佈他們爲「公共」?編輯:這是這樣做的任何潛艇。通常在最重要的一切之上。編輯2:公共範圍對調試不利。你有沒有考慮過把這些書作爲參數? – findwindow

回答

0

有更好,更優雅的解決方案。但這是最簡單也是最容易實現的。聲明3個全局對象變量來保存工作簿引用。打開工作簿並在OpenWorkbooks中分配給這些變量。根據需要使用它們。關閉它們並在CloseWorkbooks的新程序中將它們設置爲Nothing。 (是不是在這方面需要Call

Public gwbFear as WorkBook 
Public gwbGender as WorkBook 
Public gwbHappy as WorkBook 

Sub RunAll() 
    OpenWorkbooks 
    ProcessFear 
    ProcessGender 
    ProcessHappy 
    CloseWorkbooks 
End Sub 
相關問題