VBA運行模組1,等到完成然後運行模組2,等到完成然後運行模組3,等到完成然後運行模組4。

VBA運行模組1,等到完成然後運行模組2,等到完成然後運行模組3,等到完成然後運行模組4。

Excel 2019 Windows

我有4 頁工作簿,每一頁都有一個VBA 模組,用於對上一個工作表中的資料執行各種任務,因此它們需要一個接一個地運行,但僅當前一個工作表完成且當前正在手動運轉時。

我想要一個單一的模組/宏,為了爭論,稱為“RunAll”,當單擊/調用時執行相同的任務。

模組1。將分隔 txt 檔案中的資料匯入並清理到工作表 1 中 - 資料由 2000 - 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或3的情況下手動執行時會發生什麼。您主要需要對sheet# 的引用進行硬編碼。

相關內容