为什么在 Excel 2013 的 VBA 中“^”运算符之前需要一个空格,否则会产生编译时错误“预期列表或分隔符”

问题描述 投票:0回答:3

如果我输入例如

Sqr(a ^ 2 + b ^ 2)
,则不会有错误。但是当我输入
Sqr(a ^ 2 + b^ 2)
时,它会产生一个我不明白的编译错误:

pic

VBA7 中

^
的功能是什么,而不是表示求幂的
_^
(下划线显示空格)?

vba excel-2013 vba7
3个回答
3
投票

这是一个 64 位 问题。

^ 可能会使编译器混淆是否使用运算符与操作数值作为 LongLong。

出现此问题的原因是扬抑符 (^) 在此上下文中不明确。对于 64 位版本的 VBA,扬抑符有两个含义:

  1. 它可以指定指数运算,例如 x 的 y 次方(“x^y”)。
  2. 仅对于 64 位 Office 2010 VBA 版本,它可以指定应将操作数值视为 LongLong、64 位整数值数据类型(例如“234^”)。

考虑以下场景:

您的计算机上安装了 64 位版本的 Microsoft Office 2010 电脑。在 Visual Basic IDE 中,您创建一个新项目。

在 Visual Basic for Applications (VBA) 代码中,键入一条语句 类似于以下内容:

LongLongVar2 = LongLongVar1^IntegerVar

当您在 64 位 Office 2010 VBA 版本中键入 x^y 时,VBA IDE 编辑器不知道如何解释字符串的“x^”部分。在 在这种情况下,“x^”可以被视为 LongLong 数据类型。如果 “x^”以这种方式解释,该字符串将产生错误 因为没有为“y”值指定运算符 适用于“x”值。如果您使用空格键入字符串 在值名称和扬抑符之间(例如,x ^y),您 表明您希望该符号是运算符而不是数据 类型指示符。通过这样做,您可以避免错误情况。 因此,示例表达式...应重写如下:

LongLongVar2 = LongLongVar1 ^ 整数Var


0
投票

使用^^好像还是有一些冲突:

?(-1)^^2 
"Compile Error: Expected: expression"

但我发现将这两个术语括在括号中 ^ 似乎可行。

?(-1)^(2)
1

与变量相同:

foo = -1
bar = 2
?foo^^bar
"Compile Error: Type-declaration character does not match declared data type"

(foo)^(bar)
1

0
投票

所有这些都可以追溯到 QuickBasic(用于 DOS)的早期,当时没有直接对变量进行数据键入的概念。 即你不能这样做: Dim A As Integer 相反,有代表不同数据类型的符号。 我记得,他们是: $ 用于字符串 !对于单精度数字

对于双精度数字

% 表示标准整数 & 对于长整数

您可能已经注意到,如果您尝试连接变量(例如 A&B),您会收到错误,但 A &B 可以工作。 似乎正在发生的事情是,古老的数据类型仍然存在,因此它将 A&B 解释为“采用长整型变量 A,又名 A&,以及无类型变量 B,哎呀...它们之间没有运算符,所以这是一个错误”。 如果您要使用 A&&B,它会起作用,因为它被解释为“采用长整型变量 A,又名 A&,并将其 (&) 与无类型变量 B 连接”

似乎“^”也必须包含在该组类型符号中,尽管我不记得曾经遇到过它。 通过在符号前放置空格(或括号),它将变量与其古老的数据类型分开。与 & 类似,似乎将 ^ 加倍将应用 1 作为第一个变量的数据类型,然后应用从第一个值到第二个值的幂运算。这也是为什么你不能使用 ^ 两次,因为它就像使用 ++ 或 // 进行加或除一样。

因此,答案是始终在变量末尾的任何符号之前使用空格,以避免这种过时的解释。

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