Word - 如何取消选中复选框?

时间:2015-12-09 11:55:51

标签: vba checkbox ms-word word-vba

我有4个复选框,但我们需要将选择限制为仅一个,这意味着如果您检查第一个,则其他3个将取消选中。我知道我们可以使用ActiveX单选按钮,但如果可能的话,我们更愿意避免使用ActiveX,再加上复选框,我们可以更好地控制布局。

我已将复选框的名称适当设置为Check1

enter image description here

然后我将这个非常基本的脚本放入Visual Basic部分:

Private Sub Check1_Click() Check1.Enabled = True Check2.Enabled = False Check3.Enabled = False Check4.Enabled = False End Sub

但不幸的是,检查第一个框并没有取消选中下一个框。

enter image description here

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

如果这些是内容控件,如您所示,则他们没有CLICK事件。它们的Title属性也不能由VBA识别。您向我们展示的代码是ActiveX控件,您说您不想使用它......

使用内容控件事件并不像ActiveX控件那样简单直观。与表单字段类似,内容控件仅具有“编辑”事件,这些事件触发用户进入和退出内容控件。这些事件可在ThisDocument模块的Document类别中找到。

同一个ContentControlOnExit事件触发文档中的所有内容控件,因此您需要一个Select Case或If条件来查询ContentControl参数,以便知道退出了哪个内容控件。

为了解决其他复选框,您需要使用Document.SelectContentControlsByTitle(或... ByTag)方法,该方法返回包含该标题(或标记)的所有内容控件的数组。

如果您确实想要模拟“点击”事件,则需要在文档中插入自定义XML部件,并将节点链接到内容控件。当用户更改控件的状态时,将触发ContentControlBeforeStoreUpdate事件,让您采取操作。

答案 1 :(得分:0)

您需要的属性是Value,而不是Enabled。 属性Enabled的目的是防止用户更改控件。

另外,您需要阻止事件级联。这意味着当您以编程方式更改Check2的值时,这将触发Private Sub Check2_Click(),依此类推。

为了使其正常工作,你应该改变你的代码:

Private Sub Check1_Click()
    If Check1.Value Then
        Check1.Value = True
        Check2.Value = False
        Check3.Value = False
        Check4.Value = False
    End If
End Sub

和其他复选框类似。

为了您的目的,单选按钮将是更好的选择。单选按钮具有内置功能,如果选中其他按钮,则取消选中当前选定的按钮。