
Excel 2019 Windows
4 ページのワークブックがあり、各ページには前のワークシートのデータに対してさまざまなタスクを実行する VBA モジュールがあるため、前のワークシートが終了した場合にのみ、これらのタスクを次々に実行する必要があります。現時点では、これらのタスクは手動で実行されています。
議論のために「RunAll」という単一のモジュール/マクロを用意し、クリック/呼び出されたときに同じタスクを実行したいと思います。
モジュール 1。区切り文字付き txt ファイルからシート 1 にデータをインポートしてクリーンアップします。データは 2,000 行から 110,000 行の範囲で構成されます。
モジュール 2。シート 1 を参照して特定のデータを選択し、シート 2 にフォーマットします。
モジュール 3。シート 2 を参照して特定のデータを選択し、シート 3 にフォーマットします。
モジュール 4。シート 3 を参照して特定のデータを選択し、シート 4 にフォーマットします。
各モジュールは、どのシートを参照し、どこにデータを挿入するかを認識できるようにコーディングされています。
これは非常に簡略化されたバージョンなので、長い投稿を読む必要はありませんが、手動で次々に実行すると、すべて完璧に機能します。
しかし、単に次のように記述した maco を試してみると、
Call module1
Call module2
Call module3
Call module4
一部のシートのデータが混乱しているため、一部のモジュールの実行に他のモジュール (モジュール 1 とモジュール 2) よりも時間がかかるため、すべてのデータが正しくインポートされフォーマットされる前に、先行するモジュールがタスクを完了する前に、他のモジュールが実行されているのではないかと考えています。
そこで私がやろうとしているのは...
Call Module1 (and only when it has finished then)
Call Module2 (and only when it has finished then)
Call Module3 (and only when it has finished then)
Call Module4
ここに投稿する前に、考えられる答えを求めてオンラインで徹底的に検索しましたが、私のニーズに合うものは何も見つからず、私が見つけた答えのかなりの部分は、私にはまったく理解できませんでした。
答え1
VBA はシングル スレッドです。したがって、異なる呼び出しは同時に実行されません。
@Mathieu はまさにその通りです。sheet1 を選択した状態で「モジュール 1」マクロを手動で呼び出した場合、sheet2 または sheet3 を選択した状態で手動で実行するとどうなるでしょうか。sheet# への参照をハードコードする必要があります。