VBA电源运算符(^)在64位VBA中无法正常运行

时间:2018-07-10 11:42:01

标签: vba excel-vba word-vba

我发问很愚蠢,我敢肯定有一个简单的答案。我正在尝试为数字求幂,如下所示:

Sub test()

Dim number As Long

number = 2^8 ' Expect to get 256 here

End Sub

这将产生错误:“预期:列表分隔符或”。

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

更多信息

如果在立即窗口中执行相同的操作,则会出现以下奇怪情况(无错误):

?2^8
 2  8

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

工作原理?

所以我弄乱了各种符号组合,并在“即时”窗口中发现了这一点:

?2^^8
 256

什么...?有人知道为什么会这样吗?

更多实验

我猜我的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

2 个答案:

答案 0 :(得分:3)

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

  

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

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

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

通过一种解决方案,这只是64位VBA用户“只是需要知道”的烦人的事情之一。


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

* 2我还开始了解到,使用2 ^ 2时,VBA行为不同于分配变量(感谢@ErikvonAsmuth)。

答案 1 :(得分:1)

您可以使用电源功能。例如

Sub Test()
Dim number As Long
number = Application.WorksheetFunction.power(2, 8)
End Sub

但是^运算符也必须也在工作。