VBA 电源运算符 (^) 在 64 位 VBA 中无法按预期工作

Gui*_*ips 4 excel vba ms-word

我觉得问这个问题很愚蠢,我相信有一个简单的答案。我试图获得一个数字的权力如下:

Sub test()

Dim number As Long

number = 2^8 ' Expect to get 256 here

End Sub
Run Code Online (Sandbox Code Playgroud)

这会产生错误:'预期:列表分隔符或 )'。

我很惊讶这不起作用。我知道有一个 Excel 定义的幂函数。但是 VBA 不支持 ^ 操作符 - 它在 VB6 中吗?

更多信息

如果我在“立即”窗口中执行相同操作,则会出现以下奇怪现象(没有错误):

?2^8
 2  8
Run Code Online (Sandbox Code Playgroud)

看起来只是 2 和 8 之间的空格。

有用?

所以我弄乱了各种符号组合,发现在立即窗口中:

?2^^8
 256
Run Code Online (Sandbox Code Playgroud)

什么……?有谁知道这可能是为什么?

更多实验

我猜我的 Excel 安装肯定坏了(尽管其他一切都正常)。即时窗口的其他一些内容:

如果我在 ^ 之前插入一个空格:

?2 ^3
 8

?2!^3
 8

?2"^3
 2 ^3

?2£^3
 2  0  3

?2%^3
 8

?2@^3
 8

?2#^3
 8
Run Code Online (Sandbox Code Playgroud)

Slo*_*ner 9

已确认:也发生在 MS Word 2010、2013、2016 所有 64 位 Office*1

*1 我怀疑这适用于大多数(如果不是全部)64 位办公应用程序

这似乎是 64 位版本的 MS Office 的问题。在 32 位版本中,插入符号^用于幂运算符,但是在 64 位运算符中,它也用于 LongLong 类型的变量(docs.microsoft.com/.../vba/.../longlong-data-键入)。

在 64 位 VBA 中,当使用Debug.Print*2 时,IDE 会自动更正2^2为,2^; 22 ^2会自动更正为2 ^ 2; 使代码可编译。

作为一种解决方案,这只是 64 位 VBA 用户“只需要知道”的那些烦人的事情之一


编辑:微软确认问题https://support.microsoft.com/en-gb/help/2454019/the-64-bit-office-2010-vba-compiler-shows-an-error-when-it-encounters

*2 我还了解到 VBA 行为在使用时debug.Print与分配变量时不同(感谢@ErikvonAsmuth