相关疑难解决方法(0)

为什么这段代码在粘贴时编译但是否则失败?

一位朋友让我看看这个页面,并注意到一个论坛用户的签名中有一段奇怪的代码.

代码是一个单行,如下所示:

On Local Error Resume Next: If Not Empty Is Nothing Then Do While Null: ReDim i(True To False) As Currency: Loop: Else Debug.Assert CCur(CLng(CInt(CBool(False Imp True Xor False Eqv True)))): Stop: On Local Error GoTo 0
Run Code Online (Sandbox Code Playgroud)

滚动删除:

关于本地错误恢复下一个:如果不为空则没有,然后做空:ReDim i(真假)作为货币:循环:其他Debug.Assert CCur(CLng(CInt(假冒错误真Xor假Eqv真))) ):停止:On Local Error GoTo 0

相当令人兴奋的是,代码编译(我没有尝试运行它,但这是无关紧要的)如果你只是按原样粘贴它(然后再不要再触摸它!)到一个有效的程序级范围.

一些观察:

  • 如果指令分隔符/冒号被新行替换,则不再编译
  • On Local Error 可以简化为 On Error
  • 嵌套转换初看起来没有任何特别的兴趣,但事实证明,取代一系列转换并与简单比较Debug.Assert True会使代码一致地编译,因此其中的某些东西会弄乱编译器.
  • 如果代码被粘贴,则编译; 如果Local在VBE验证了行之后以任何方式修改它(甚至只是删除),它就会停止编译,似乎没有任何东西让VBA理解它,除非该行被删除并重新粘贴.
  • 最新的语法/解析器是根据实际的VBA规范建立的,它解析并解析得很好(这真是让我)
  • 如果已知该行未编译,然后剪切/重新粘贴,则它不会编译...但是再次从VBE外部重新粘贴它,它会突然编译.

问题是,这段代码如何根据VB语言规范进行编译?这是VB [6 | …

vb6 vba specifications vbe

12
推荐指数
1
解决办法
314
查看次数

标签 统计

specifications ×1

vb6 ×1

vba ×1

vbe ×1