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

VBA电源运算符(^)在64位VBA中未按预期工作,vba,excel,ms-word,Vba,Excel,Ms Word,我觉得这样问很愚蠢,我相信答案很简单。我试图得到一个数字的幂,如下所示: Sub test() Dim number As Long number = 2^8 ' Expect to get 256 here End Sub 这将产生错误:“应为:列表分隔符或“”” 我很惊讶这不起作用。我知道有一个Excel定义的幂函数。但是VBA中不支持“^”运算符吗?VB6中支持“^”运算符吗 进一步信息 如果在即时窗口中执行相同操作,则会得到以下奇怪信息(无错误): 看起来只是2和8之间的空格 有

我觉得这样问很愚蠢,我相信答案很简单。我试图得到一个数字的幂,如下所示:

Sub test()

Dim number As Long

number = 2^8 ' Expect to get 256 here

End Sub
这将产生错误:“应为:列表分隔符或“””

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

进一步信息

如果在即时窗口中执行相同操作,则会得到以下奇怪信息(无错误):

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

有效吗?

因此,我在摆弄各种符号组合,发现在即时窗口中:

?2^^8
 256
什么。。。?有人知道为什么会这样吗

更多实验

我猜我的Excel安装一定是坏了(尽管其他一切都很好)。在即时窗口中还有一些其他内容:

?2^^8
 256
如果在^之前插入空格:

?2 ^3
 8

?2!^3
 8

?2"^3
 2 ^3

?2£^3
 2  0  3

?2%^3
 8

?2@^3
 8

?2#^3
 8

您可以使用powerfunction。比如说

Sub Test()
Dim number As Long
number = Application.WorksheetFunction.power(2, 8)
End Sub
但是操作员一定也在工作

已确认:也发生在MS Word 2010、2013、2016所有64位Office*1中 *1我怀疑这适用于大多数(如果不是全部的话)64位office应用程序

这似乎是64位版本MS Office的一个问题。在32位版本中,插入符号
^
用于幂运算符,但在64位运算符中,它也用于LongLong()类型的变量

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

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


编辑:Microsoft确认问题


*2我还了解到,使用
debug.Print
时,VBA的行为与分配变量时不同(由于)

我无法重现您的错误。你的程序中还有其他代码吗?请注意,您目前根本没有输出您的号码。我已将其剥离到上面,但仍然得到了错误。声明这是VBA中的有效运算符。哪一行失败?关于您的编辑,
28
?2&8
的预期输出。那么,我想您已经发现了一个奇怪之处-64位VBA版本有一些奇怪的东西,这就是其中之一。IIRC 32位版本将自动更正
2^3
2^3
(这是我们使用VBA时所习惯的),所以这让我有点发疯了。。。谢谢:)这是一个突破性的改变,但这是添加LongLong类型的预期效果,因此最好不要使用加载的单词,如“问题”或“正确更正”。@BenVoigt lol-修复,tnx@BenVoigt嗯,零钱。。。不确定,语言语法没有改变;现有代码不会停止工作。。。在64位VBA IDE中,使用32位版本时,自动更正无法正常工作。我想象如果这是VS(而不是VBA IDE),那么行为会被相当快地修改;虽然我知道你是从哪里来的,但我认为它可能会被修复,而Rubberduck项目()可能会这样做,所以我不认为这些条款过于繁重。。。VBA只需要一些爱。我猜你是说在32位版本中通过自动更正运行的现有代码不会停止工作。但是在没有自动更正帮助的情况下编辑的现有代码可能包含
2^y
,并且解析的方式已经改变(以前是一个二进制运算符,现在是一个类型后缀)。基本上是的-但是经过反思,我想最大的陷阱可能来自从这样的地方复制和粘贴代码块。。。