vba - 如何判断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 时,我未能找到有关此主题的文档。我发现的关于行号的最好的是在词汇表中。
似乎需要大量的试验和错误。我希望有人完成了这项工作并愿意分享。
解决方案
声明不是可执行的语句(你不能打破它们),所以给它们编号是没有意义的。
那是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
导致错误的声明的问题,在这里可以正常工作:
推荐阅读
- flutter - dart/flutter:创建后指定 HSLColor 的饱和度
- android - id_token 缺少使用 OpenID Connect 的 AD FS 2016 的自定义声明
- php - Laravel 项目中的 Voyager 无法在实时服务器上找到 CSS
- spring-boot - 用于 Spring Boot 的自定义 KeyManager 和 TrustManager
- pandas - 大熊猫中的分组总和和平均值并制作数据框
- java - 如何从另一个线程的函数中抛出异常?
- javascript - 正确传递结构(js)
- zsh - Tmux 总是显示主机名而不是应用程序正在运行
- sql - sqlite3 为每天返回 x 天的单独列
- c++ - 如何使用 SFINAE 区分 MyMap、std::map 和 std::unordered_map?