Зачем мне пробел перед оператором '^' в VBA для Excel 2013, иначе он выдаст ошибку времени компиляции "Ожидаемый список или разделитель"
Если я наберу, например, Sqr(a ^ 2 + b ^ 2)
нет ошибки Но когда я печатаю Sqr(a ^ 2 + b^ 2)
он выдает ошибку компиляции, которую я не понимаю:
Какова функция ^
в VBA7 в отличие от _^
(подчеркивание, чтобы показать пространство), что означает возведение в степень?
2 ответа
Это 64-битная проблема.
^ может запутать компилятор относительно того, используется ли оператор в зависимости от значения операнда, как LongLong.
Эта проблема возникает из-за того, что символ окружности (^) в этом контексте неоднозначен. Для 64-битных версий VBA у круговой связи есть два значения:
- Он может обозначать операцию экспоненты, такую как x в степени y ("x^y").
- Только для 64-разрядных выпусков Office 2010 VBA можно указать, что значение операнда следует рассматривать как тип данных LongLong, 64-разрядное целочисленное значение (например, "234^").
Рассмотрим следующий сценарий:
На вашем компьютере установлена 64-разрядная версия Microsoft Office 2010. В Visual Basic IDE вы создаете новый проект.
В коде Visual Basic для приложений (VBA) вы вводите оператор, который выглядит следующим образом:
LongLongVar2 = LongLongVar1 ^ IntegerVar
Когда вы вводите x^y в 64-разрядных выпусках Office 2010 VBA, редактор VBA IDE не знает, как интерпретировать часть строки "x^". В этом контексте "x^" можно рассматривать как тип данных LongLong. Если "x^" интерпретируется таким образом, строка выдаст ошибку, потому что нет никакого оператора, который указан для значения "y", применяемого к значению "x". Если вы вводите строку, используя пробел между именем значения и окружностью (например, x ^y), вы указываете, что вы хотите, чтобы символ был оператором, а не указателем типа данных. Делая это, вы можете избежать ошибки. Поэтому пример выражения... должен быть переписан следующим образом:
LongLongVar2 = LongLongVar1 ^ IntegerVar
Использование ^^, похоже, все еще имеет некоторые конфликты:
?(-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