我有4个复选框,但我们需要将选择限制为仅一个,这意味着如果您检查第一个,则其他3个将取消选中。我知道我们可以使用ActiveX单选按钮,但如果可能的话,我们更愿意避免使用ActiveX,再加上复选框,我们可以更好地控制布局。
我已将复选框的名称适当设置为Check1
:
然后我将这个非常基本的脚本放入Visual Basic部分:
Private Sub Check1_Click()
Check1.Enabled = True
Check2.Enabled = False
Check3.Enabled = False
Check4.Enabled = False
End Sub
但不幸的是,检查第一个框并没有取消选中下一个框。
有什么想法吗?谢谢!
答案 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
和其他复选框类似。
为了您的目的,单选按钮将是更好的选择。单选按钮具有内置功能,如果选中其他按钮,则取消选中当前选定的按钮。