Почему в этом коде у параметра NoReset странное поведение:
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset = False
По логике и по описанию параметр "NoReset = False" наоборот должен все сбрасывать, но он сбрасывает при значении True. Прав ли я?
После NoReset должно быть двоеточие:
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:= False
Если вы не ставите после параметра двоеточие, то слово "NoReset" макрос воспринимает, как переменную, а не как параметр функции. То есть, используя "NoReset" без использования двоеточия, вы создаёте, сами того не зная, переменную. То есть делаете действие, аналогичное этому:
Dim NoReset
Затем переменная сравнивается со словом False.
Переменная NoReset имеет тип данных Variant и видимо становится булевой. Т.к. в ней пусто, то в переменной NoReset становится False.
Затем False сравнивается с False:
False = False
Это возвращает True.
Во второй параметр метода Protect, подставляется True, что соответствует:
NoReset:=True
Чтобы было меньше проблем, сделайте режим, при котором нужно обязательно создавать переменные. В этом случае, если макрос увидит несозданную переменную с помощью Dim, будет ошибка и макрос не запустится.
Как сделать этот режим, написано здесь: https://forumvba.ru/index.php?topic=402.0
Спасибо.