2012-08-01 7 views
0

我有一个2010年的Excel 64位模型,它有一个VBA子例程来运行16个输入组合,所有输入都使用相同的Excel模型计算得到处理,然后输出结果标签在模型中。我可以访问高性能集群(HPC),并希望运行VBA代码,以便可以并行运行16个组合,而不是HPC上的当前顺序过程。我应该如何处理这个问题?例如,我是否需要将每个组合放入一个单独的子例程中,并有一个主VBA子例程来调用每个组合?我需要包含的前端VBA代码和后端VBA代码才能在HPC上运行模型?修改迭代VBA例程以在高性能群集上运行

+0

此链接可能有些用处[为Windows HPC群集构建VBA应用程序和工作簿](http://www.microsoft.com/en-us/download/details.aspx?id=2939) – 2012-08-01 03:23:56

回答

0

Excel VBA does not directly allow多线程,所以很遗憾没有简单的VBA解决方案。

我可以在这里看到一些选项,它将取决于您的问题是否可以使用它们。

  1. 在Excel 2007和2010中,工作表函数可以并行执行。如果你的VBA代码是一个函数而不是一个子函数,并且你的大部分数据来自工作表,你可以尝试利用它。

  2. 你可以编写一个自己处理多线程的DLL,以及call it from Excel。为此,您必须将代码移植到VB 6或VB.NET(或直接用C/C++重写),然后手动处理多线程。

+0

非常感谢您的帮助。我有两个这样的问题。对于其中的一个,从VBA调用的每个迭代中耗时的过程实际上都是运行SOLVER。这是最耗时的SOLVER部件,例如24小时为所有组合。 SOLVER能否在HPC上运行这个问题?如果可以的话,我仍然可以依次运行这些组合,但是每个迭代的持续时间都会缩短。 – BruceCH 2012-08-01 03:02:15

+0

您是否看过Solver的商业版本:它可以快几个数量级? http://www.solver.com/exceluse.htm – 2012-08-01 08:07:19

+0

是的,我试过使用Solver的商业版本,并且没有什么区别。 – BruceCH 2012-08-01 18:05:56