Зачем мне пробел перед оператором '^' в VBA для Excel 2013, иначе он выдаст ошибку времени компиляции "Ожидаемый список или разделитель"

Если я наберу, например, Sqr(a ^ 2 + b ^ 2) нет ошибки Но когда я печатаю Sqr(a ^ 2 + b^ 2) он выдает ошибку компиляции, которую я не понимаю:

фильм

Какова функция ^ в VBA7 в отличие от _^ (подчеркивание, чтобы показать пространство), что означает возведение в степень?

2 ответа

Решение

Это 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 для приложений (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
Другие вопросы по тегам