如何在vba编辑器中自动填充行号?

编程入门 行业动态 更新时间:2024-10-09 20:20:57
本文介绍了如何在vba编辑器中自动填充行号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 是否有一个宏可以自动填充vba编辑器的行号?我想要调用行号,以便知道发生错误。

解决方案

你不想要行号。 / h2>

不是为了调试原因,不是任何东西。行号已被弃用,原因如下:它们是程序之前的古代遗物,而 GOTO 是获取任何地方的唯一途径。

如 Documentation.SO , Erl 只返回错误发生之前的最后遇到的行号。这可能意味着误导日志,如果您记录错误:

Sub DoSomething() 10 On Error GoTo 50 Debug.Print 42/0 30退出子 50 Debug.Print在线上出现错误& Erl'返回10 End Sub

此外,行号只有整数分辨率(一个VBA模块最多可以有65,535行,这是分辨率的两倍),如果您不记住这一点,将会默默地失败并高兴地报告错误的行号: p>

Sub DoSomething() 99997 On Error GoTo 99999 99998 Debug.Print 42/0 99999 Debug.Print Erl'打印34462 - 哪一行是? End Sub

任何严重的VBA应用程序都将使用结构化错误处理

编写小而专门的程序(即编写符合现代最佳做法的代码),行号完全无意义。

行号是保持颈部的痛苦;他们混淆了代码,使其整体更难阅读(因此进行调试)。

说,IIRC MZ -Tools 3有这样的功能。

请记住,当行号是一件事时,BASIC看起来像这样:

10 GOSUB 100 20 GOSUB 1000 99 END 100 REM CLEAR SCREEN 110打印CHR $(147) 120返回 200 REM MODULO 210 LET MOD%= V%-INT(V%/ FB%)* FB% 220返回 1000 REM INIT VARIABLES 1010 LET FIZZ $ =FIZZ 1011 LET BUZZ $ =BUZZ 1020 LET FIZZ%= 3 1021 LET BUZZ%= 5 1030 LET MIN% = 1 1031 LET MAX%= 15 1100 PRINT FIZZ $ +:+ STR $(FIZZ%) 1101 PRINT BUZZ $ +:+ STR(BUZZ%) 1102 PRINT FIZZ $ + BUZZ $ +:+ STR $(FIZZ%* BUZZ%) 1105 PRINT 2000 REM ACTUAL FIZZBUZZ LOOP 2010 FOR X = MIN%TO MAX% 2015 LET RESULT $ = STR $(X) 2020 LET FB%= FIZZ%* BUZZ% 2021 LET V%= X 2024 GOSUB 200 2025 IF M OD%= 0 THEN LET RESULT $ = FIZZ $ + BUZZ $:GOTO 2050 2030 LET FB%= FIZZ% 2031 GOSUB 200 2035 IF MOD%= 0 THEN LET RESULT $ = FIZZ $:GOTO 2050 2040 LET FB%= BUZZ% 2041 GOSUB 200 2045 IF MOD%= 0 THEN LET RESULT $ = BUZZ $:GOTO 2050 2050打印结果$ 2090 NEXT X 2099 RETURN

以上是一个工作的Commodore 64 BASIC 2.0 fizzbuzz program。 VBA具有出色的向后兼容性。只有轻微的修改,它运行在VBA中:

Sub Main() 10 GoSub 100 20 GoSub 1000 99 End 100 Rem CLEAR SCREEN 110'Debug.Print Chr $(147)'Chr $(147)是C64上的一个特殊字符 120返回 200 Rem MODULO 210让模数%= V% - Int(V%/ FB%)* FB% 220返回 1000 Rem INIT VARIABLES 1010让FIZZ $ =FIZZ 1011让BUZZ $ =BUZZ 1020让FZZ%= 3 1021让BZZ%= 5 1030让最小%= 1 1031让Max%= 15 1100 Debug.Print FIZZ $ +:+ Str $(FZZ%) 1101 Debug.Print BUZZ $ +:+ Str(BZZ%) 1102 Debug.Print FIZZ $ + BUZZ $ +:+ Str $(FZZ%* BZZ%) 1105 Debug.Print 2000 Rem实际FIZZBUZZ LOOP 2010对于X =最小%To Max% 2015让RESULT $ = Str $(X) 2020让FB%= FZZ%* BZZ% 2021让V%= X 2024 GoSub 200 2025如果模数%= 0然后让RESULT $ = FIZZ $ + BUZZ $:GoTo 2050 2030让FB%= FZZ% 2031 GoSub 200 2035如果模数%= 0然后让RESULT $ = FIZZ $:GoTo 2050 2040让FB%= BZZ% 2041 GoSub 200 2045如果模数%= 0然后让RESULT $ = BUZZ $:GoTo 2050 2050 Debug.Print RESULT $ 2090下一个X 2099返回结束子

不要写1980年代码,我们30年后。

Is there a macro that can auto populate the line number for a vba editor? I want to line number for debugging reasons as to know where the error occured.

解决方案

You don't want line numbers.

Not for "debugging reasons", not for anything. Line numbers are deprecated for a reason: they're a relic of an ancient time before procedures even existed, and GOTO the only way to get anywhere.

As shown in Documentation.SO, Erl only returns the last encountered line number before an error was raised. This can mean misleading error logs, if you're logging errors:

Sub DoSomething() 10 On Error GoTo 50 Debug.Print 42 / 0 30 Exit Sub 50 Debug.Print "Error raised on line " & Erl 'returns 10 End Sub

Also, line numbers only have Integer resolution (a VBA module can have up to 65,535 lines, which is twice that resolution), and will silently fail and happily report wrong line numbers if you don't keep that in mind:

Sub DoSomething() 99997 On Error GoTo 99999 99998 Debug.Print 42 / 0 99999 Debug.Print Erl 'Prints 34462 - and which line is that? End Sub

Any serious VBA application will use structured error handling instead.

Write small, specialized procedures (i.e. write code that follows modern-day best practices), and the line number becomes utterly meaningless.

Line numbers are a pain in the neck to maintain; they clutter up the code and make it overall harder to read (and therefore to debug).

That said, IIRC MZ-Tools 3 had such a functionality.

Keep in mind, that BASIC looked like this when line numbers were a thing:

10 GOSUB 100 20 GOSUB 1000 99 END 100 REM CLEAR SCREEN 110 PRINT CHR$(147) 120 RETURN 200 REM MODULO 210 LET MOD% = V%-INT(V%/FB%)*FB% 220 RETURN 1000 REM INIT VARIABLES 1010 LET FIZZ$ = "FIZZ" 1011 LET BUZZ$ = "BUZZ" 1020 LET FIZZ% = 3 1021 LET BUZZ% = 5 1030 LET MIN% = 1 1031 LET MAX% = 15 1100 PRINT FIZZ$ + ":" + STR$(FIZZ%) 1101 PRINT BUZZ$ + ":" + STR(BUZZ%) 1102 PRINT FIZZ$ + BUZZ$ + ":" + STR$(FIZZ%*BUZZ%) 1105 PRINT 2000 REM ACTUAL FIZZBUZZ LOOP 2010 FOR X = MIN% TO MAX% 2015 LET RESULT$ = STR$(X) 2020 LET FB% = FIZZ%*BUZZ% 2021 LET V% = X 2024 GOSUB 200 2025 IF MOD%=0 THEN LET RESULT$=FIZZ$+BUZZ$ : GOTO 2050 2030 LET FB% = FIZZ% 2031 GOSUB 200 2035 IF MOD%=0 THEN LET RESULT$=FIZZ$ : GOTO 2050 2040 LET FB% = BUZZ% 2041 GOSUB 200 2045 IF MOD%=0 THEN LET RESULT$=BUZZ$ : GOTO 2050 2050 PRINT RESULT$ 2090 NEXT X 2099 RETURN

The above is a working Commodore 64 BASIC 2.0 fizzbuzz program. VBA has fabulous backward-compatibility. With only slight modifications, it runs in VBA:

Sub Main() 10 GoSub 100 20 GoSub 1000 99 End 100 Rem CLEAR SCREEN 110 'Debug.Print Chr$(147) 'Chr$(147) was a special character on C64 120 Return 200 Rem MODULO 210 Let Modulo% = V% - Int(V% / FB%) * FB% 220 Return 1000 Rem INIT VARIABLES 1010 Let FIZZ$ = "FIZZ" 1011 Let BUZZ$ = "BUZZ" 1020 Let FZZ% = 3 1021 Let BZZ% = 5 1030 Let Min% = 1 1031 Let Max% = 15 1100 Debug.Print FIZZ$ + ":" + Str$(FZZ%) 1101 Debug.Print BUZZ$ + ":" + Str(BZZ%) 1102 Debug.Print FIZZ$ + BUZZ$ + ":" + Str$(FZZ% * BZZ%) 1105 Debug.Print 2000 Rem ACTUAL FIZZBUZZ LOOP 2010 For X = Min% To Max% 2015 Let RESULT$ = Str$(X) 2020 Let FB% = FZZ% * BZZ% 2021 Let V% = X 2024 GoSub 200 2025 If Modulo% = 0 Then Let RESULT$ = FIZZ$ + BUZZ$: GoTo 2050 2030 Let FB% = FZZ% 2031 GoSub 200 2035 If Modulo% = 0 Then Let RESULT$ = FIZZ$: GoTo 2050 2040 Let FB% = BZZ% 2041 GoSub 200 2045 If Modulo% = 0 Then Let RESULT$ = BUZZ$: GoTo 2050 2050 Debug.Print RESULT$ 2090 Next X 2099 Return End Sub

Don't write 1980's code, we're 30 years later.

更多推荐

如何在vba编辑器中自动填充行号?

本文发布于:2023-05-31 13:58:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/392998.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:行号   器中   编辑   如何在   vba

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!