Как скрыть опции флажков, если в ms-word выбран другой флажок - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь собрать форму в ms-word, в которой желательно, чтобы, если пользователь установит флажки 1 из 3, остальные два и смежный текст будут скрыты.

Я знаю, как что-то скрыть содержимое, но я совершенно незнаком с VBA / программированием в целом, поэтому я не совсем понимаю, что не так в моем цикле If / Else, но это определенно не показывает / скрывает все.

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)

If ContentControl.Title = "checkbox1" And ContentControl.Checked = True Then
    ActiveDocument.Bookmarks("Approve").Range.Font.Hidden = True
Else
    ActiveDocument.Bookmarks("Approve").Range.Font.Hidden = False
End If

If ContentControl.Title = "checkbox2" And ContentControl.Checked = True Then
    ActiveDocument.Bookmarks("Denied 1").Range.Font.Hidden = True
    ActiveDocument.Bookmarks("Denied 2").Range.Font.Hidden = True
Else
    ActiveDocument.Bookmarks("Sign1").Range.Font.Hidden = False
    ActiveDocument.Bookmarks("Sign2").Range.Font.Hidden = False
End If

If ContentControl.Title = "checkbox3" And ContentControl.Checked = True Then
    ActiveDocument.Bookmarks("pending").Range.Font.Hidden = True
Else
    ActiveDocument.Bookmarks("pending").Range.Font.Hidden = False
End If

End Sub

Если я оставляю только одну из частей if / else, она работает нормально, но когда я сохраняю все 3, она не работает.

Любое руководство действительно ценится!

1 Ответ

1 голос
/ 25 марта 2019

Здесь:

If ContentControl.Title = "checkbox1" And ContentControl.Checked = True Then
    ActiveDocument.Bookmarks("Approve").Range.Font.Hidden = True
Else
    ActiveDocument.Bookmarks("Approve").Range.Font.Hidden = False
End If

Вы устанавливаете "Approve" скрытым, если заголовок "checkbox1" и Checked имеет значение True, но Else будет работать, когда только один ( или ни ) из этих правда. Таким образом, ваши предложения Else всегда выполняются в двух других блоках, не подключенных к элементу управления, по которому щелкнули.

было бы лучше так:

If ContentControl.Title = "checkbox1" Then
    If ContentControl.Checked = True Then
        ActiveDocument.Bookmarks("Approve").Range.Font.Hidden = True
    Else
        ActiveDocument.Bookmarks("Approve").Range.Font.Hidden = False
    End If
End If

или (короче):

If ContentControl.Title = "checkbox1" Then

    ActiveDocument.Bookmarks("Approve").Range.Font.Hidden = _
                         (ContentControl.Checked = True)

End If

Всего:

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)

    Dim bChecked As Boolean
    bChecked = (ContentControl.Checked = True)

    If ContentControl.Title = "checkbox1" Then
        ActiveDocument.Bookmarks("Approve").Range.Font.Hidden = bChecked
    End If

    If ContentControl.Title = "checkbox2" Then
        ActiveDocument.Bookmarks("Denied 1").Range.Font.Hidden = bChecked
        ActiveDocument.Bookmarks("Denied 2").Range.Font.Hidden = bChecked
    End If

    If ContentControl.Title = "checkbox3" Then
        ActiveDocument.Bookmarks("pending").Range.Font.Hidden = bChecked
    End If

End Sub
...