Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
如何判断vba中的语句是否可以有行号_Vba - Fatal编程技术网

如何判断vba中的语句是否可以有行号

如何判断vba中的语句是否可以有行号,vba,Vba,在古代,所有的基本语句都允许甚至要求有行号。我今天写了一些代码在所有语句上创建行号。其目的是使用错误处理程序中的erl函数来帮助调试错误。以下是一个示例: Public Sub AddErrorEventHandlerToForm() 1040 Const sProcedure As String = "AddErrorEventHandlerToForm" 1060 Dim obj As AccessObject, dbs As Object 1080

在古代,所有的基本语句都允许甚至要求有行号。我今天写了一些代码在所有语句上创建行号。其目的是使用错误处理程序中的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访问代码的结果。简单的代码为所有语句编号。我必须从所有声明部分语句中删除数字,因为编译器在编号时将它们标记为错误。 它还在编号时标记过程的第一条语句。1040语句未标记、不生成和出错,但也不会将常量sProcedure添加到程序的符号表中。因此,当使用sProcedure时,代码中会生成一个错误

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


看来需要大量的反复试验。我希望有人已经完成了这项工作,并愿意与大家分享。

声明不是可执行语句(您不能破坏它们),所以对它们进行编号是没有意义的

这是
Public which
Private which
Friend which
Dim which
Const which
语句,包括
Sub
函数
属性
声明,以及任何不在过程范围内的语句

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

然而,请注意

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

Public Sub TestMe()
10 DoSomething: DoSomething
End Sub

Private Sub DoSomething()
10 Debug.Print "did something"
End Sub
您是否期望
TestMe
输出
做了两次什么事?Woopsie,第一个过程调用是一个行标签。。。是的,你可以把行号和行号标签放在同一行代码上

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


进一步的检查表明还有其他因素在起作用。我用原代码的副本替换了更改后的代码。它编译得很好。我在相关行中添加了语句编号,它仍然可以编译。我将继续调查。
Erl
已损坏且未记录。只有当你有大量的程序做了太多的事情并且有太多的失败原因时,行编号才是“需要的”。你自己说的,“在古代”这是一件事。我们在2019年,不要像1985年那样编写代码。如果VBA是您的谋生之道,并且您确实需要行号来记录日志,那么您需要-然后您将获得实际的文件行号(而不是任意编号的标签)、对调用堆栈的编程访问以及try/catch错误处理。免责声明:我与vbWatchDog/EverythingAccess没有任何关联,但它的作者为我管理的一个开源VBIDE插件项目做出了贡献。