web-dev-qa-db-ja.com

他のモジュールを実行するVBAモジュール

Microsoft VBAでプログラミングしています。最初に、マクロの助けを借りてQueryTableを生成する必要があり(そのためのコードがあります)、その後マクロの助けを借りてQueryTableのデータを使用する数式を適用する必要があります。私が直面している問題は、QueryTableが、コードが存在するSubが機能し終わった後にのみ表示されることです。これは、式を生成するコードがないため、式を生成するコードを含めることができないことを意味します。

今のアイデアは、他のモジュールを実行するモジュールを書くことです:

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

これはエラーを与えます:

実行時エラー1004-マクロ「マクロ名」を実行できません。このブックでマクロが使用できないか、すべてのマクロが無効になっている可能性があります。

解決策は何ですか? QueryTableの読み込みの問題に対する別の解決策があるかもしれません。

9
ositra

問題のマクロが同じブックにあり、名前が存在することを確認する限り、モジュールではなく名前で他のモジュールからそれらのマクロを呼び出すことができます。

したがって、Module1に2つのマクロMacro1とMacro2があり、Module2にMacro3とMacro 4がある場合、別のマクロではそれらすべてを呼び出すことができます。

Sub MasterMacro()
    Call Macro1
    Call Macro2
    Call Macro3
    Call Macro4
End Sub
17
Jerry Beaucaire

「Module1」は、「moduleController」を含む同じブックの一部ですか?
そうでない場合は、Application.Run someWorkbook.xlsm!methodOfModuleを使用して「Module1」のパブリックメソッドを呼び出すことができます。

3
shahkalpesh

Artisoのおかげで新しいことを学びました。プロパティボックスで各モジュールに名前を付けました。これらの名前は、モジュールで宣言したものでもありました。 2番目のモジュールを呼び出そうとすると、エラーが発生し続けました:コンパイルエラー:モジュールではなく変数またはプロシージャが必要です

上記の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
1
KeithG