内容控件没有“onChange”事件,因此您无法以简单的方式让内容控件表现得像 ActiveX 复选框。与表单域类似,ContentControls 的代码在进入/退出控件时触发。
为内容控件模拟“onChange”的唯一方法是将内容控件链接到文档中 CustomXMLPart 中的节点,然后使用 Document_ContentControlBeforeStoreUpdate 事件,该事件在 CustomXMLPart 中的节点内容将要更改时触发。
如果如您的问题所示,这对于您的目的来说太复杂了,您可以使用一个 MacroButton 字段,该字段显示一个看起来像复选框的字体字符(符号)。单击该字段会将该字符交换为另一个看起来已选中的字符。然后再次反向以进行下一次单击。这里有一些示例代码可以帮助您入门。如果您不喜欢我选择的复选框,您可以从 Insert/Symbols/Symbol 中选择其他内容。只需更改字符编号和字体名称即可。
默认情况下,MacroButton 字段在双击时触发。当文档在 AutoOpen 宏中打开时,您可以将其更改为单击一次。
Sub AutoOpen()
Application.Options.ButtonFieldClicks = 1
End Sub
Sub ToggleCheckBox()
Dim iNotChecked As Integer, iChecked As Integer
Dim rngCheck As word.Range
Dim sBkmName As String, sFontName as String
iNotChecked = 111
iChecked = 253
sBkmName = "bkmCheck"
sFontName = "Wingdings"
Set rngCheck = ActiveDocument.Bookmarks(sBkmName).Range
If Asc(rngCheck.Text) = iNotChecked Then
rngCheck.Text = Chr(iChecked)
ActiveDocument.Bookmarks.Add sBkmName, rngCheck
rngCheck.Font.Name = sFontName
ElseIf Asc(rngCheck.Text) = iChecked Then
rngCheck.Text = Chr(iNotChecked)
rngCheck.Font.Name = sFontName
ActiveDocument.Bookmarks.Add sBkmName, rngCheck
End If
End Sub