如何在VBA Excel 2016中查看已编译子例程的大小?

a.t*_*.t. 3 excel vba compiler-errors excel-vba

在模块的特定子例程中找到"大过程"错误后,我正在重构模块中的代码.我很好奇重构在减少编译代码大小方面的效果.

所以我想知道是否有办法在Excel 2016模块中查看子程序的编译代码的大小?

到目前为止,我的尝试仅限于在线搜索确定VBA中已编译模块或子例程大小的方法.

它使我达到了这里列出的VBA限制.它没有提到一种方法来查看编译过程的大小,也没有提到这是否(实际上)可行.

(正如在评论中提到,编译程序的当前最大大小是64K的规定在这里.)

  1. 我认为编译过程的大小不是1对1与行数有关.(因为这没有考虑短线或长线.但我目前不确定如何编译vba-procure,以及因此线如何贡献编译文件大小,否则解决方案可能是计算编译文件大小.)
  2. 过程1对1也不依赖于存储为'.txt'文件的代码大小.(因为它可以包含对编译代码大小没有贡献的注释)

Disclamer - 我很清楚我正在修改的旧代码的缺点.写得不好,我认为比尔盖茨的这句话很好地说明了这一点:

通过代码行测量编程进度就像按重量测量飞机构建进度一样.

我认为重构,并在较短的子程序中打破代码是适当的第一步.为了监控这个过程,结合VBA提出的硬瓶颈,因为Procedure too long- 错误引发了我这个问题.

Mat*_*don 12

不,你做不到.VBA在几个阶段编译,它是部分p代码,部分解释,并且在一天结束时,编译过程的kb大小不是你需要处理的.


你需要紧急阅读有关抽象的内容.触发此编译器错误的过程超过10K行代码.在适当的抽象级别上的健康过程可能比那个小500到千倍(不是开玩笑) - 编译代码的大小绝对没有意义.

如果你担心编译代码的大小,你就不会为人类编写代码.

代码不是为编译器编写的,而是为了运行而运行的运行时环境.代码是为人类维护者编写的,用于阅读,理解,跟踪,调试,修改,扩展等.在没有任何抽象级别的情况下,代码是一个无聊的,令人难以忍受的令人烦恼的一系列可执行语句,总是冗余,低效和烦人容易出错.

您可以使用第三方工具来分析VBA代码.MZ-Tools 3.0是免费的,但最新版本不是.它有一个功能,可以告诉你每个模块的每个过程中有多少行代码,有多少代码被注释掉,是否有未使用的变量等.

Rubberduck是免费的开源,正在积极开发中(免责声明:我拥有项目的存储库),并且具有代码度量功能(不同于代码检查),可以帮助您识别问题最严重的区域(尽管解析10K-衬管模块可能需要一段时间):

Rubberduck代码指标

是你的"代码行"度量; Cyclomatic Complexity是代码中不同可能的执行路径的粗略指示(度量在模块级聚合中产生的多少意义是有争议的); 最大嵌套也是"箭头形状"代码可能有多严重的指标.

这些指标中的高值表示您可能需要提取方法.