免费的VB6/VBA分析器和最佳的Excel实践

gra*_*eds 5 vb6 excel vba profiling

我们有很多通过VBA和Excel生成的报告.只有一小部分报告是实际计算 - 大部分工作是sql调用和格式化/写入单元格.最长的需要几个小时,大多数需要大约20-30分钟.

VBA/Excel代码插入VB6桌面应用程序使用的dll - 这里是所有sql调用.虽然我确信这里有改进的余地,但这并不是我所关注的 - 桌面应用程序非常活泼.

两个VBA函数被大量使用:这些函数称为GetRange和SetupCell,它们几乎总是一起出现.GetRange函数是Excel.Range对象的包装器.它需要一个工作表,以及范围范围的4个值.它的主要用途是选择单元格进行编辑.似乎没有太多机会对其进行优化,但这是最好的方式吗?

它的合作伙伴是SetupCell.这需要一个Excel.Range对象,文本和十几个关于单元格的参数(字体,边框等).大多数这些参数都是可选的布尔值,但同样,这看起来非常浪费.其中一些可以在死后设置,但有些依赖于单元格中包含的值.

这些函数中包含了相当多的代码,主要是如果语句和工作不喜欢我发布它.

我想我有两个问题:是否有更好的方法,它是什么,是否有免费的分析器,我可以用来查看大部分时间是在这里还是在dll?

Cha*_*ams 6

报告几个小时是荒谬的.

如果问题是VBA购买"专业Excel开发"(stephen Bullen,Rob Bovey等):这有一个名为PerfMon的免费VBA探查器.

如果问题是Excel Calculation,请参阅http://msdn.microsoft.com/en-us/library/aa730921.aspx?ppud=4

但我猜这个问题是与逐个单元格引用事物相关的高开销:你应该一次在大块单元格中工作.

  • 如果您不想使用Stephen Bullen的PerfMon,那么为什么不使用高分辨率Windows计时器添加一些计时代码呢?在块中执行操作:基本方法是为变量变量分配范围:Dim vArr as variant vArr = Range("B4:z456").value2这将为您提供包含2-d数组的变体您可以操作数组并将其发送回excel范围("B4:z456")= vArr类似于格式化单元格格式化一系列单元格(可能使用模板表中的复制/专用)而不是单个单元格.等等 (2认同)

Ben*_*tin 3

您是否考虑过使用实际的报告解决方案?你的后端数据库是什么?如果您使用的是 MSSQL 2000 或更高版本,那么您可以免费使用一个相当不错的报告解决方案。SQL Server 报告服务

听起来好像报表大部分时间都花在格式化单元格上。这可能就是为什么报告看起来如此缓慢而桌面应用程序却不然的原因。

或者,如果您事先知道格式并且它相当静态,您可以预先格式化工作表以减少一些工作。

我也会把这个扔在那里。大多数报告解决方案都允许条件格式等,但由于它们被设计为这样的性能将比 Excel 更好。