Как объявить несколько переменных с указанием типа, используя As в VBA?

Согласно этому документация Microsoft, для проверки можно использовать следующий код;

a, b и c — все Single; x и y оба двойные

Dim a, b, c As Single, x, y As Double, i As Integer  
> a, b, and c are all Single; x and y are both Double  

Логика этого следующая

Вы можете указать разные типы данных для разных переменных, используя отдельное предложение As для каждой объявленной вами переменной. Каждая переменная принимает тип данных, указанный в первом предложении As, которое встречается после части имени переменной.

Однако, когда я проверил вывод отладчика или MsgBox VarType(a), это не так.

введите описание изображения здесь

Как видите, оказывается, что As работает только с переменными непосредственно перед собой, т. е. c, y и i. Все остальные имеют значение Variant/Empty, а VarType возвращает 0.

Это просто документация неверна, или я упустил что-то очевидное?

Microsoft Visual Basic для приложений 7.1.1056 Excel 2016 (Windows 10)


person Kouichi C. Nakamura    schedule 08.03.2019    source источник


Ответы (2)


Документация, на которую вы ссылаетесь, не является ошибочной, но она написана для VB.NET, а не для VBA.

Как вы заметили, в VBA любые объявления переменных, за которыми сразу не следует As <type>, будут Variant.

Поэтому вам нужно написать:

Dim a As Single, b As Single, c As Single, x As Double, y As Double, i As Integer
person jsheeran    schedule 08.03.2019
comment
Также см. правильную документацию для VBA: Тусклый оператор - person Pᴇʜ; 08.03.2019
comment
Угу, это ясно объясняет, с чем я столкнулся. Я не знал, что существует множество вариантов языка Visual Basic! - person Kouichi C. Nakamura; 09.03.2019
comment
это безумная особенность языка. - person NingNing; 25.04.2020

В VBA, когда вы объявляете

Dim a, b, c As Single

То, что он делает, эквивалентно этому:

Dim a As Variant, b As Variant, c As Single

Я считаю, что лучше всего всегда объявлять переменную в отдельной строке. Это предотвращает эту ошибку, а также позволяет быстрее сканировать код. Таким образом, код будет выглядеть так:

Dim a As Single
Dim b As Single
Dim c As Single
person FFFffff    schedule 08.03.2019