在ms-word中选择另一个复选框时如何隐藏复选框选项

时间:2019-03-25 03:08:50

标签: vba checkbox ms-word ms-office

我正在尝试以ms-word形式组合表格,希望如果用户选中3个复选框选项中的1个,则其他两个及其相邻文本将被隐藏。

我知道如何某种程度地隐藏内容,但是我完全不了解整个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 个答案:

答案 0 :(得分:1)

这里:

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

如果标题为“ 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