2012-03-28 20 views
9

私はMicrosoft VBAでプログラミングしています。まず、マクロの助けを借りてQueryTableを生成する必要があります(私はそのコードを持っています)。その後、マクロの助けを借りて、QueryTableのデータを使用する数式を適用する必要があります。私が直面している問題は、コードがあるSubが作業を終えた後にQueryTableが現れることです。これは、式を生成するコードが含まれていないことを意味します。なぜなら、生成する式のデータがないからです。今他のモジュールを実行する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には2つの問題が考えられます。 1.)あなたはそれを追加した後にクエリをリフレッシュしていますか? 2.)デフォルトでは、新しいクエリはバックグラウンドで更新されるように設定されています。それを変更しないと、マクロはクエリが終了するのを待っていません。 '.Refresh BackgroundQuery:= False'でクエリを更新してみてください。 – mischab1

答えて

16

問題のマクロが同じブックにあり、名前が存在することを確認している限り、他のモジュールのマクロをモジュールではなく名前で呼び出すことができます。 Module1の中であなたは二つのマクロMacro1をとMacro2ではを持っていたし、モジュール2に、あなたがMacro3とマクロ4を持っていた、その後、別のマクロにあなたがそれらすべてを呼び出すことができれば

だから:

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

また、Macro1-Macro4がMasterMacroと同じモジュールにない場合、Macro1-Macro4はパブリックではなくプライベートとして宣言する必要があります。 – mischab1

+0

ありがとう、ジェリー!あなたはそれを解決しました! 私が遭遇した別の問題は、マクロの名前をモジュールの名前と同じにすることはできないということです。彼らは異なっている必要があります! – ositra

2

"moduleController"を含む同じブックの "Module1"は一部ですか?
そうでなければ、Application.Run someWorkbook.xlsm!methodOfModuleを使用して、 "Module1"のpublicメソッドを呼び出すことができます。

+0

はい、同じワークブックにあります。それにもかかわらず、コードラインに感謝します!私は新しいことを学びました。 – ositra

1

を私はちょうどArtisoに新しいのおかげ何かを学びました。私は各モジュールにプロパティボックスに名前を付けました。これらの名前は、私がモジュールで宣言したものでもありました。コンパイルエラー:モジュールではなく予想される変数またはプロシージャ

同じ名前のないArtisoのコメントを読んだ後、私は2番目のモジュールの名前を最初の問題解決しました。興味深いもの!情報Artisoありがとう!

私の経験が不明である場合:

モジュール名:AllFSGroupsCY ます。Public Sub AllFSGroupsCY()

モジュール名:AllFSGroupsPY ます。Public Sub AllFSGroupsPY()

AllFSGroupsCY(から)

Public Sub FSGroupsCY() 

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

End Sub 
関連する問題