为什么Visual Basic编辑器将科学记数法转换为#末尾的数字?

Gee*_*aky 3 excel vba vbe

我找不到任何关于此的信息:

我正在初始化一个变量,当我输入一个科学记数法的数字,如8.45673E11,但它将它转换为标准形式,最后用复合符号845673000000# - 我想知道这是否应该发生?是否有控制此自动转换的设置?复合符号表示什么?

非常感谢!羊毛

Mat*_*don 5

这种情况正在发生,因为当您在VBE中键入代码时,您所看到的并不是您所获得的.

当前的代码行只是纯文本:在您按Enter或远离该行之前,它不会被理解为代码.然后,引擎盖下发生了几件事:

  • VBE 解析当前代码行,并确定它是否可以编译.
    • 如果它是一个无效的语句,它会弹出一个"编译错误"消息框,或者用红色突出显示该语句(取决于你的VBE"按需编译"设置).
  • 有效代码被编译为P代码指令,并与源文件一起存储在主机文档中 - 尽管此时它仍然只在内存中.
  • P代码被转换回VBA源,您输入的代码行就地重新编写.

因此,当您编写时Foo = 8.45673E11,VBE确定赋值的RHS是双字面值,并编译相应的P-Code指令; 当该指令被翻译回VBA源代码时,它被"重写"为一个显式双字,845673000000#(#后缀是一个类型提示,意思是"那是一个Double")因为P-Code不关心数字的表示(例如科学记数法),只有数字本身; 该类型提示字符混合成的类型是已知的,不需要再重新计算的表达式编译下一次.

当你写作时Foo = 8.45673E11,你仍然会得到Foo = 845673000000#,因为P-Code不关心那个空白.

这也是为什么给定的Public Foo As Double,如果你键入foo = 123你会得到Foo = 123,因为内部符号表中Foo一个大写F.