Excel VBA 程序仅以 25% 的速度运行

tro*_*cal 5 speed vba intel-core-i3 windows-8 microsoft-excel-2013

我的四核 Acer Aspire S3 超极本上运行着一个 VBA 程序。麻烦的是,它只使用了 25% 的 CPU(其他进程加起来使用了~1%)。笔记本电脑运行 Windows 8.0。Excel 版本为 2013(32 位)。仅使用了 55% 的系统 RAM,Excel 使用了 55% 的一半。

我认为可能只使用了 25%,因为 Excel 只使用了一个核心。但是,我没有任何东西可以支持这个理论。如何加速程序?

谢谢。

Exc*_*lll 11

以下所有内容均适用于 Excel 2007 及更早版本。根据上面评论中发布的链接@??c???007,Excel 2013 中有一些对多线程的本机支持。也就是说,除非您是有经验的程序员,否则忘记它的警告仍然适用。

不幸的是,VBA 不支持多线程,因此您的 VBA 计算将仅限于处理器的一个内核。

但是,有一种高级方法可以通过生成 VBscript 文件并同时执行来诱使 VBA 运行多个线程。这通过在 Excel 进程之外运行您的代码来解决问题,并允许 Windows 管理分配给不同线程的资源。

也就是说,让它工作很可能意味着完全重新思考代码的逻辑(即,你必须弄清楚如何以一种对它们并发运行有意义的方式分配任务),这可能很可能对您的项目不可行。我自己从来没有实现过这个,所以除了告诉你我已经告诉过你的内容之外,我无法真正帮助你。

但是,如果您想进入兔子洞,这里有一篇有趣的博客文章,其中显示了一个完成此操作的示例。警告:除非你是一个有成就的程序员,否则你最好忘记这个想法,只接受 VBA 在单线程中运行。

Stack Overflow 上的其他大胆资源:
https : //stackoverflow.com/q/19159025/657668
/sf/ask/400509511/

当然还有其他方法可以在不使用多线程的情况下优化您的 VBA 代码。没有看到你的代码,就不可能提出有针对性的建议,但这里有一些常见的嫌疑人:

  • 将工作表中的数据加载到数组中以加快处理速度。与工作表的交互是 VBA 执行的主要瓶颈,可以通过使用数组来最小化。
  • 一个相关的问题是 Excel 在对单元格进行每次更改后重新计算工作簿。这可以通过设置来避免Application.Calculation = xlManual。请务必Application.Calculation = xlAutomatic在退出您的 Sub 之前将其设置回。


小智 6

我听起来像您尝试使用的程序是单线程的,这意味着它只能使用一个内核,它不知道其他内核是否存在。除了购买具有更快单核时钟速度的处理器或使用支持多线程的程序之外,确实没有具体的方法可以加快速度。

  • @tropical 否。切换到 64 位将允许进程使用超过 4GB 的内存,但是它不允许它在更多内核上运行。 (4认同)

归档时间:

查看次数:

10794 次

最近记录:

11 年,1 月 前