背景
我有一个非常大的data table,在高端64位机器上运行大约100万个输入场景需要长达12个小时。 这些方案基于许多离散的Excel模型,然后将其输入财务模型以进行详细计算
为了改进这个过程,我希望测试并比较以下的速度:
Calculation
,ScreenUpdating
等)VBS
以刷新不可见Excel实例中的数据表所以,我正在寻找以编程方式管理数据表的最佳方法
更新:使用(2)和(3)中的代码没有提供测试带有单个大型数据表的工作簿的简单示例的好处
相当令人惊讶的是,在数据表的VBA中似乎很少 - 可能没有 - 直接支持
我目前的知识和文献搜索
BeforeRefresh
和AfterRefresh
可以使用此class module code添加事件。 Intellisense不提供此作为数据表的选项ActiveWorkbookk.Sheets(1).QueryTables(1)
那样访问单个数据透视表和QuertyTable。不是那样的数据表Data Tables
,然后运行RefreshAll
作为解决方法。 解决方法肯定是可行的,因为我只有一个数据表,但如果存在,我更喜欢直接的方法。
是的,我坚持使用Excel:)
请不要为此方法建议其他工具,输入模型和使用数据表的总体模型都是
我只是好奇是否有办法通过使用代码刷新特定数据表来调整过程,我上面的初始测试结果已经结束了。
答案 0 :(得分:1)
因此,您正在寻找以编程方式管理数据表的最佳方法。
嗯,当我手动创建一个数据表时,Excel 2013会为我录制一个宏,它就是
Selection.Table ColumnInput:=Range("G4")
签名是
Range.Table(RowInput as Range, ColumnInput as Range) as Boolean
记录在Range.Table Method中。 Range.Table()函数似乎总是返回true。
这是使用VBA创建数据表的唯一方法。但无论如何,这就是数据表。
AFAIK数据表没有类或对象,因此没有dt.refresh()或类似的方法。并且没有可以查询的数据表集合。您必须刷新工作表或使用Range.Table()重新创建表。
有DataTable Interface,但它与图表有关,与Range.Table()无关。
如你所说,你应该关掉通常的嫌疑人,即
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
尝试在工作簿中使用尽可能少的公式。删除与基于数据表的单元格无关的所有公式。删除所有中间结果。最好有一个细胞,一个,可能是大的公式。
示例:G4是您的ColumnInput,它包含= 2 * G3,其中G3包含= G1 + G2, 然后最好把= 2 *(G1 + G2)放入G4。
您的高端计算机可能有6个核心。将您的场景分为6个块和 有6个Excel实例并行计算它们。