首页 > 解决方案 > 如何判断vba中的语句是否可以有行号

问题描述

在古代,所有基本语句都被允许有甚至被要求有行号。我今天正在编写一些代码来在所有语句上创建行号。目的是使用错误处理程序中的 erl 函数来帮助调试错误。这是一个示例:

       Public Sub AddErrorEventHandlerToForm()
1040        Const sProcedure As String = "AddErrorEventHandlerToForm"
1060        Dim obj As AccessObject, dbs As Object
1080        Dim i As Integer
1100        Dim modOpenModules As Modules

这是修改一些 ms-access 代码的结果。头脑简单的代码为所有语句编号。我不得不从所有声明部分语句中删除数字,因为编译器在编号时将它们标记为错误。它还在编号时标记过程的第一条语句。1040 语句没有标记,不会生成错误,也不会将常量 sProcedure 添加到程序的符号表中。所以稍后在使用 sProcedure 时,代码中会产生错误。

在为 Office vba 搜索 Microsoft Developers Network 时,我未能找到有关此主题的文档。我发现的关于行号的最好的是在词汇表中。

似乎需要大量的试验和错误。我希望有人完成了这项工作并愿意分享。

标签: vba

解决方案


声明不是可执行的语句(你不能打破它们),所以给它们编号是没有意义的。

那是Public Whatever, Private Whatever, Friend Whatever, Dim Whatever,Const Whatever语句,包括Sub, Function, 和Property声明,以及不在过程范围内的任何内容。

编译的任何声明语句都不会抛出运行时错误。请注意,End Sub/Function/Property从技术上讲,这也是一个可执行语句 - 但对它们进行编号毫无意义。

但是请注意,您不需要 line numbers

这是行号令人讨厌的几种方式之一:

Public Sub TestMe()
10 DoSomething: DoSomething
End Sub

Private Sub DoSomething()
10 Debug.Print "did something"
End Sub

您是否期望TestMe输出did something两次?Woopsie,第一个程序调用是一个行标签!...是的,您可以在同一行代码中同时拥有行号和行标签。

也就是说,我无法重现Const导致错误的声明的问题,在这里可以正常工作:

显示 const 值的智能感知


推荐阅读