VBA电源运算符(^)在64位VBA中无法正常工作[重复]

问题描述 投票:1回答:2

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

Sub test()

Dim number As Long

number = 2^8 ' Expect to get 256 here

End Sub

这会产生错误:'Expected:list separator or)'。

我很惊讶这不起作用。我知道有一个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
vba excel-vba word-vba
2个回答
3
投票

确认:同样发生在MS Word 2010,2013,2016全部64位Office * 1中

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

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

在64位VBA中,当使用Debug.Print * 2时,IDE会自动将2^2更正为2^; 2,但2 ^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我也了解到使用debug.Print时的VBA行为与指定变量不同(感谢@ErikvonAsmuth


1
投票

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

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

但^运算符一定也一直在运行。

© www.soinside.com 2019 - 2024. All rights reserved.