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

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

pic

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


person John Alexiou    schedule 13.03.2015    source источник
comment
Редактор VBA должен добавить дополнительные пробелы между r ^ 2 для вас. Если это не так, значит, что-то не так, но что на самом деле не так, я не знаю :O   -  person    schedule 13.03.2015
comment
Нет воспроизведения в Excel 2010, так что это должно быть проблемой Excel 2013.   -  person Jean-François Corbett    schedule 13.03.2015
comment
@Jean-FrançoisCorbett не воспроизводится ни в 2013 году, ни   -  person    schedule 13.03.2015
comment
Ну, я ожидал, что редактор добавит пробелы, но этого не происходит. Выдает ошибку компиляции. Ошибка возникает, когда я также набираю r^ 2. У меня 64-битный офис 2013   -  person John Alexiou    schedule 13.03.2015


Ответы (1)


Это 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

person QHarr    schedule 07.07.2018
comment
Итак, 2^^2=4 как будет интерпретироваться как (2^)^2 = (2)^2 = 4? - person John Alexiou; 07.07.2018