我们有很多通过VBA& amp; Excel中。只有一小部分报告是实际计算 - 大部分工作是sql调用和格式化/写入单元格。最长的需要几个小时,大部分需要大约20-30分钟。
VBA / Excel代码插入VB6桌面应用程序使用的dll - 这里是所有sql调用。虽然我确信这里还有改进的余地,但这并不是我所关心的 - 桌面应用程序非常活泼。
大量使用两个VBA函数:这些函数称为GetRange和SetupCell,它们几乎总是一起出现。 GetRange函数是Excel.Range对象的包装器。它需要一个工作表,以及范围范围的4个值。它的主要用途是选择单元格进行编辑。似乎没有太多机会选择它,但它是最好的方式吗?
它的合作伙伴是SetupCell。这需要一个Excel.Range对象,文本和十几个关于单元格的参数(字体,边框等)。大多数这些参数都是可选的布尔值,但同样,这看起来非常浪费。其中一些可以在死后设置,但有些依赖于单元格中包含的值。
这些函数中包含了很多代码,主要是如果语句和工作不喜欢我发布它。
我想我有两个问题:有更好的方式,它是什么和是否有免费的分析器我可以用来查看是否大部分时间是在这里还是在dll中?
答案 0 :(得分:6)
报告几个小时是荒谬的。
如果问题是VBA购买“专业Excel开发”(stephen Bullen,Rob Bovey等):这有一个名为PerfMon的免费VBA探查器。
如果问题是Excel Calculation,请参阅http://msdn.microsoft.com/en-us/library/aa730921.aspx?ppud=4
但我猜这个问题是与逐个单元格引用事物相关的高开销:你应该一次在大块单元格中工作。
答案 1 :(得分:3)
您是否考虑过使用实际的报告解决方案?你的后端数据库是什么?如果您使用的是MSSQL 2000或更高版本,那么您可以免费使用相当不错的报告解决方案。 SQL Server Reporting Services。
听起来好像报道大部分时间都在格式化单元格。这可能就是为什么报告看起来很慢而桌面应用程序没有。
或者,如果您事先知道格式并且它是相当静态的,那么您可以预先格式化工作表以减少部分工作。
我也会把它扔进那里。大多数报告解决方案都允许使用条件格式等,但由于它们的设计工作性能会比Excel更好。
答案 2 :(得分:3)
这不是分析器建议,但它建议加快花费时间更新屏幕的Excel宏。通过在宏运行时关闭屏幕更新,我获得了出色的结果:设置Application.ScreenUpdating = False和also using a number of other similar settings。当宏完成时,请务必再次打开它们:P
答案 3 :(得分:1)
它不是免费的,但你可以用这个来描述。我怀疑该演示将满足您的需求:http://www.aivosto.com/vbwatch.html
答案 4 :(得分:0)
听起来像VBA代码(或写入工作表的VB代码)是逐行进行的,这可能需要很长时间,并且设计很差。一次写入Excel作为变体。全部导入数据后格式化工作表。 谢谢 罗斯