我觉得问这个问题很愚蠢,我相信有一个简单的答案。我试图获得一个数字的权力如下:
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)
*1 我怀疑这适用于大多数(如果不是全部)64 位办公应用程序
这似乎是 64 位版本的 MS Office 的问题。在 32 位版本中,插入符号^
用于幂运算符,但是在 64 位运算符中,它也用于 LongLong 类型的变量(docs.microsoft.com/.../vba/.../longlong-data-键入)。
在 64 位 VBA 中,当使用Debug.Print
*2 时,IDE 会自动更正2^2
为,2^; 2
但2 ^2
会自动更正为2 ^ 2
; 使代码可编译。
作为一种解决方案,这只是 64 位 VBA 用户“只需要知道”的那些烦人的事情之一。
*2 我还了解到 VBA 行为在使用时debug.Print
与分配变量时不同(感谢@ErikvonAsmuth)