如果我输入例如
Sqr(a ^ 2 + b ^ 2)
,则不会有错误。但是当我输入 Sqr(a ^ 2 + b^ 2)
时,它会产生一个我不明白的编译错误:
VBA7 中
^
的功能是什么,而不是表示求幂的 _^
(下划线显示空格)?
这是一个 64 位 问题。
^ 可能会使编译器混淆是否使用运算符与操作数值作为 LongLong。
出现此问题的原因是扬抑符 (^) 在此上下文中不明确。对于 64 位版本的 VBA,扬抑符有两个含义:
考虑以下场景:
您的计算机上安装了 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
使用^^好像还是有一些冲突:
?(-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
所有这些都可以追溯到 QuickBasic(用于 DOS)的早期,当时没有直接对变量进行数据键入的概念。 即你不能这样做: Dim A As Integer 相反,有代表不同数据类型的符号。 我记得,他们是: $ 用于字符串 !对于单精度数字
% 表示标准整数 & 对于长整数
您可能已经注意到,如果您尝试连接变量(例如 A&B),您会收到错误,但 A &B 可以工作。 似乎正在发生的事情是,古老的数据类型仍然存在,因此它将 A&B 解释为“采用长整型变量 A,又名 A&,以及无类型变量 B,哎呀...它们之间没有运算符,所以这是一个错误”。 如果您要使用 A&&B,它会起作用,因为它被解释为“采用长整型变量 A,又名 A&,并将其 (&) 与无类型变量 B 连接”
似乎“^”也必须包含在该组类型符号中,尽管我不记得曾经遇到过它。 通过在符号前放置空格(或括号),它将变量与其古老的数据类型分开。与 & 类似,似乎将 ^ 加倍将应用 1 作为第一个变量的数据类型,然后应用从第一个值到第二个值的幂运算。这也是为什么你不能使用 ^ 两次,因为它就像使用 ++ 或 // 进行加或除一样。
因此,答案是始终在变量末尾的任何符号之前使用空格,以避免这种过时的解释。