VBA 运行模块 1,等待完成后运行模块 2,等待完成后运行模块 3,等待完成后运行模块 4。?

VBA 运行模块 1,等待完成后运行模块 2,等待完成后运行模块 3,等待完成后运行模块 4。?

Excel 2019 Windows

我有 4 页工作簿,每页都有一个 VBA 模块,可以对前一个工作表中的数据执行各种任务,因此需要一个接一个地运行它们,但只有当前一个工作表完成并且此时它们正在手动运行时才可以。

我想要一个单一的模块/宏,为了论证的目的,称为“RunAll”,当单击/调用时,它会执行相同的任务。

模块 1. 将带分隔符的 txt 文件中的数据导入并清理到工作表 1 中 - 数据由 2000 到 110,000 行组成。

Module2. 查看 Sheet 1,选择某些数据并将其格式化到 Sheet 2 中。

Module3. 查看 Sheet 2 并选择某些数据并将其格式化到 Sheet 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# 的引用进行硬编码。

相关内容