Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
免费VB6/VBA分析器和最佳Excel实践_Excel_Vba_Vb6_Profiling - Fatal编程技术网

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

免费VB6/VBA分析器和最佳Excel实践,excel,vba,vb6,profiling,Excel,Vba,Vb6,Profiling,我们有很多通过VBA和Excel生成的报告。只有一小部分报告是实际计算-大部分工作是sql调用和单元格的格式化/写入。最长的一次需要几个小时,大多数每次大约需要20-30分钟 VBA/Excel代码插入VB6桌面应用程序使用的dll中——所有sql调用都是在这里进行的。虽然我确信这里还有改进的余地,但我并不担心这一点——桌面应用程序相当快 两个VBA函数被大量使用:它们被称为GetRange和SetupCell,它们几乎总是同时出现。GetRange函数是Excel.Range对象的包装器。它采

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

VBA/Excel代码插入VB6桌面应用程序使用的dll中——所有sql调用都是在这里进行的。虽然我确信这里还有改进的余地,但我并不担心这一点——桌面应用程序相当快

两个VBA函数被大量使用:它们被称为GetRange和SetupCell,它们几乎总是同时出现。GetRange函数是Excel.Range对象的包装器。它采用一张图纸和4个值作为范围的范围。它的主要用途是拾取要编辑的单元格。似乎没有太多机会选择它,但这是最好的方法吗

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

这些函数中包含很多代码,主要是如果语句和工作不希望我发布它们的话


我想我有两个问题:是否有更好的方法,它是什么?是否有免费的分析器,我可以用来查看大部分时间是在这里还是在dll中?您是否考虑过使用实际的报告解决方案?你的后端数据库是什么?如果您使用的是MSSQL 2000或更高版本,您可以免费使用一个相当不错的报告解决方案

听起来好像报表大部分时间都在格式化单元格。这可能就是为什么报告看起来很慢,而桌面应用程序却没有

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


我也会把这个扔进去。大多数报告解决方案都允许使用条件格式等,但由于它们的设计初衷是这样的,因此性能要比让Excel这样做要好得多。

这不是探查器的建议,但建议加快花费时间更新屏幕的Excel宏的速度。通过在宏运行时关闭屏幕更新,我得到了非常好的结果:set Application.screenputation=False,and。只要确保在宏结束时再次打开它们:P

它不是免费的,但您可以使用此配置文件进行配置。我怀疑演示版足以满足您的需要:

对于一份报告来说,几个小时是荒谬的

如果问题是VBA购买“专业Excel开发”(stephen Bullen、Rob Bovey等):这有一个名为PerfMon的免费VBA分析器

如果问题是Excel计算,请参阅


但我想问题在于一个单元格一个单元格地引用内容所带来的高开销:您应该始终一次在大的单元格块中工作。

听起来像是VBA代码(或写入工作表的VB代码)逐行执行,这可能需要很长时间,而且设计很差。一次性将其作为变体写入Excel。在数据全部导入后格式化工作表。 谢谢
罗斯

对于一些报告,是的。对于其他人,没有。对于每个工作表,我们有一个vba“文件”,加上几个支持“文件”。它肯定不会在dll上工作,因为它有100多个类和模块。我们已经这样做了,我们将Application.Calculation设置为manual(xlCalculationManual)。没有那么容易。报告需要有不同的长度,一些单元格需要根据单元格中的值(或单元格的总和)进行着色。SSR将能够处理几乎所有你扔给它的东西-我支持这个答案。为你自己准备了一个漂亮的pimpage:-)说真的,虽然问题不在于计算-我们很少计算(excel或其他)。探查器将帮助确定是对db的调用正在杀死系统,还是缓慢的逐单元格格式正在杀死系统。如何一次处理一大块单元格?如果您不想使用Stephen Bullen的PerfMon,那么为什么不使用高分辨率windows计时器添加一些计时代码?以块方式执行操作:basic方法是将一个范围分配给变量变量:Dim vArr作为VARINT vArr=range(“B4:z456”)。value2这将为您提供一个包含二维数组的变量。您可以操纵数组并将其发送回excel range(“B4:z456”)=vArr,在格式化单元格范围时类似地设置单元格格式(可能使用模板工作表中的“复制/粘贴专用”)而不是一个单一的细胞等等。