Это можно объяснить с помощью законов Деморгана . Если мы возьмем:
If LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user" Then
тогда мы можем переписать это, заменив <>
на =
, а затем отрицая каждый член на Not
:
If Not(LCase(Environ("username")) = "me") Or Not(LCase(Environ("username")) = "some other user") Then
Используя законы Деморгана, мы можем применить единое отрицание ко всему выражению, если поменяем оператор Or
на оператор And
:
If Not(LCase(Environ("username")) = "me" And LCase(Environ("username")) = "some other user") Then
Невозможно, чтобы LCase(Environ("username")
одновременно равнялся двум различным значениям, и поэтому условие And
будет ложным. Применение оператора Not
означает, что все выражение всегда будет иметь значение True независимо от значения «username»
Для исправленной версии, использующей And
вместо Or
, следующие шаги:
If LCase(Environ("username")) <> "me" And LCase(Environ("username")) <> "some other user" Then
Измените <>
на =
и примените Not
операторов:
If Not(LCase(Environ("username")) = "me") And Not(LCase(Environ("username")) = "some other user") Then
Применить законы Деморгана:
If Not(LCase(Environ("username")) = "me" Or LCase(Environ("username")) = "some other user") Then
Теперь, если имя пользователя - "я" или имя пользователя - "какой-то другой пользователь", тогда условие Or
будет иметь значение True, а оператор Not
изменит его на False, как требуется.
Если в качестве имени пользователя используется любое другое значение, тогда условие Or
будет иметь значение False, а оператор Not
изменит его на True, как требуется