Ошибка VBA при снятии защиты документа, запуске sub и защите документа (диапазоны с if/then, похоже, не работают, но основные, если тогда работает)

#vba #ms-word #combobox #userform

Вопрос:

У меня есть форма пользователя, которая снимает защиту с документа, чтобы информация могла быть введена в документ, и после того, как она защитит мой документ. Все мои субмарины настроены и работают в дополнение к той, которая создает мне проблемы:

Пример sub, который работает:

 Private Sub ComboBox5_Change()
ActiveDocument.Unprotect "password"
    Dim ComboBox5 As Range
    Set ComboBox5 = ActiveDocument.Bookmarks("bmragpd").Range
    ComboBox5.Text = Me.ComboBox5.Value
    
    If Me.ComboBox5.Value = "No" Then
    ComboBox5.Text = "205.55a"

    End If
    
    If Me.ComboBox5.Value = "Yes" Then
    ComboBox5.Text = ""

    
    End If
    ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True, Password:="password"
End Sub
 

По какой-то причине этот подраздел не работает и скажет, что документ уже не защищен, есть какие-либо предложения о том, как это решить? Я попытался удалить незащищенный на combobox6, однако это, похоже, тоже не работает:

 Private Sub ComboBox6_Change()
ActiveDocument.Unprotect "password"

   Dim rngComboBox6 As Range

Dim sssaText As String

Dim iiia As Integer

    Set rngComboBox6 = ActiveDocument.Bookmarks("bmfcs").Range

    sssaText = ComboBox6.Value

    If Me.ComboBox6.Value = "Yes" Then

        For iiia = 1 To 1

    sssaText = sssaText amp; Chr(13) amp; "200" _
    amp; Chr(13) amp; "200.1" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "OEBS" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "21c" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "22c" _
    amp; Chr(13) amp; "Yes" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "Yes" _
    amp; Chr(13) amp; "Two" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "ES2a.1" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "222" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "222a" _
    amp; Chr(13) amp; "222b" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "3.a.1" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "NA" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "I. TuuVa"
 
    Next iiia

    sssaText = sssaText amp; Chr(13) amp; "717217" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "1212" _
    amp; Chr(13) amp; "" _
    amp; Chr(13) amp; "D.1" _
    amp; Chr(13) amp; "F2B-4"

    End If
            
    rngComboBox6.Text = sssaText

    ActiveDocument.Bookmarks.Add "bmfcs", rngComboBox6
    
     If Me.ComboBox6.Value = "No" Then
    ComboBox6.Text = ""

    End If
    
    ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True, Password:="password"
End Sub
 

Ответ №1:

Первый End If находится не в том месте. Вы добавляете текст в документ независимо от значения поля со списком.

Не рекомендуется использовать событие изменения элемента управления для фиксации изменений в документе. Помимо всего прочего, это не позволяет пользователю отменять без внесения изменений.

Вместо этого используйте кнопку OK/Применить/Готово.

Затем вам нужно только один раз снять/повторно защитить документ.