2012-03-28 205 views
9

我在Microsoft VBA中編程。起初我需要在宏的幫助下生成一個QueryTable(我已經得到了代碼),然後在宏的幫助下,我需要應用使用QueryTable中的數據的公式。我面臨的問題是,QueryTable只出現在其代碼所在的Sub已完成工作之後。這意味着我不能在其中包含生成公式的代碼,因爲沒有用於生成公式的數據。運行其他模塊的VBA模塊

的想法,現在是編寫運行其他模塊一個模塊:

Sub moduleController() 
    Run "Module1" 
    Run "Module2" 
End Sub 

這給了錯誤:

Run time error 1004 - cannot run the macro "macroname". The macro may not be available in this workbook or all macros may be disabled.

可能是什麼解決辦法嗎?也許有我的QueryTable加載問題的另一種解決方案?

+0

您的QueryTable有兩個可能的問題。 1.)你添加後刷新查詢嗎? 2.)默認情況下,新的查詢設置爲在後臺刷新。如果你不改變它,那麼你的宏不會等待查詢結束。嘗試使用'.Refresh BackgroundQuery:= False'刷新您的查詢。 – mischab1 2012-03-28 18:20:41

回答

16

只要有問題的宏在同一個工作簿中,並且您確認名稱存在,您可以通過名稱而不是模塊從其他任何模塊調用這些宏。

因此,如果在模塊1你有兩個宏宏1和Macro2和單詞數你有Macro3和宏4,然後在另一個宏,你可以把他們都稱爲:

Sub MasterMacro() 
    Call Macro1 
    Call Macro2 
    Call Macro3 
    Call Macro4 
End Sub 
+0

此外,如果Macro1 - Macro4與MasterMacro不在同一模塊中,則需要將Macro1 - Macro4聲明爲公共,而不是私有。 – mischab1 2012-03-28 17:57:55

+0

謝謝傑瑞!你解決了它! 應該指出,我偶然發現的另一個問題是,宏的名稱不能與模塊的名稱相同。他們必須有所不同! – ositra 2012-03-29 06:56:01

2

「Module1」是否包含「moduleController」的同一工作簿的一部分?
如果不是,您可以使用Application.Run someWorkbook.xlsm!methodOfModule來調用公共方法「Module1」。

+0

是的,它在同一個工作簿上。儘管如此,感謝您的代碼行!我學到了一些新東西。 – ositra 2012-03-29 06:33:22

1

我剛學到新的東西感謝Artiso 。我在屬性框中給每個模塊一個名字。這些名字也是我在模塊中聲明的。當我試圖打電話給我的第二個模塊時,我一直收到一個錯誤:編譯錯誤:預期的變量或過程,而不是模塊

在閱讀Artiso上面關於不具有相同名稱的評論後,我重命名爲第二個模塊,第一個,問題解決了。有趣的東西!感謝Artiso的信息!

如果我的經驗是不清楚:

模塊名稱:AllFSGroupsCY 公用Sub AllFSGroupsCY()

模塊名稱:AllFSGroupsPY 公用Sub AllFSGroupsPY()

從AllFSGroupsCY()

Public Sub FSGroupsCY() 

    AllFSGroupsPY 'will error each time until the properties name is changed 

End Sub