Значения по умолчанию для переменных / массивов VBA

Обратите внимание на объявления

Dim x As Double
Dim avg(1 To 10) As Double

Каковы значения по умолчанию в x и avg ?

Путем тестирования я хочу сказать, что x инициализируется нулем. Точно так же я хочу сказать, что все элементы в avg были инициализированы равными нулю.

Однако могу ли я написать код, который зависит от этого? Или значения инициализации по умолчанию действительно неопределенны?

17
задан Jean-François Corbett 23 October 2014 в 06:49
поделиться

3 ответа

Если вы указываете тип данных, но не указываете инициализатор, Visual Basic инициализирует переменную значением по умолчанию для ее типа данных, который для всех числовых типов равен 0 (нулю).

При запуске макроса все переменные инициализируются значением. Числовая переменная инициализируется нулем, строка переменной длины инициализируется строкой нулевой длины (""), а строка фиксированной длины заполняется кодом ASCII 0. Переменные переменной инициализируются пустыми. Пустая переменная представлена ​​нулем в числовом контексте и строкой нулевой длины ("") в строковом контексте.

Ссылка .

20
ответ дан 30 November 2019 в 13:03
поделиться

Вы можете написать код, который неявно зависит от значения по умолчанию данного типа данных, но это не значит, что вы всегда должны , потому что это не так очевидно, как вы Вы делаете, что может запутать следующего человека, читающего ваш код (и этот человек может стать вами через год).

Вы не можете ошибиться с явным присвоением начального значения вашим переменным. Если вы хотите, вы можете сделать это в той же строке, что и объявление:

Dim x As Double: x = 0

Конечно, это немного больше для массивов, но обычно есть удобное место для инициализации их ниже в вашем коде где вы их все равно проходите.

4
ответ дан 30 November 2019 в 13:03
поделиться

Да, вы должны иметь возможность зависеть от того, какие типы чисел инициализируются в 0 в VBA, поскольку это их значение по умолчанию.

Однако, если вас это беспокоит, а начальные значения так важны, тогда я рекомендую вам просто явно присвоить им значение 0 (хотя вам это и не нужно).

2
ответ дан 30 November 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: