Значение по умолчанию для несуществующей переменной - PullRequest
0 голосов
/ 14 сентября 2018

Я работал над проектом на основе VBA excel и сделал опечатку при вызове переменной. После попытки отладки функции некоторое время я понял, что делаю ссылку на несуществующую переменную (из-за опечатки), и все же отладчик не указал проблему.

Я попытался получить значение переменной, и результат был пустым. Я попытался сделать сравнение с переменной, и она каждый раз возвращала false.

Я хотел бы знать, связано ли это со значением по умолчанию Boolean, равным False (как говорит Microsoft для языка VB здесь )? И если это так, то почему это не имеет значения?

Кроме того, почему отладчик не указал проблемы?

Sub MySub()
    'Print absolutely nothing
    Debug.Print myVariable

    If (myVariable) Then
        Debug.Print "Condition is true"
    Else
        'The condition always comes in that
        Debug.Print "Condition is false"
    End If
End Sub

1 Ответ

0 голосов
/ 14 сентября 2018

Если вы не объявляете переменную, она считается вариантом, а естественное состояние варианта - Пусто.

На самом деле первая строка печатает пустую строку в окне Immediate, поскольку оно пустое.

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

Sub MySub()

    Debug.Print myVariable 'Prints and empty line As the variable is Empty Variant

    If (myVariable) Then 'Treated as a Boolean with value False empty = false
        Debug.Print "Condition is true"
    Else
        'This fires as base boolean value is False
        Debug.Print "Condition is false"
    End If
End Sub

enter image description here

Если вы хотите, чтобы всплывала ошибка, используйтеOption Explicit вверху модуля или установите это значение по умолчанию в настройках.

Чтобы установить его по умолчанию, перейдите на Tools ==> Options и нажмите Require Variable Declaration

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...