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# 的引用进行硬编码。