我尝试使用两个复选框制作一个word文档,其中每个复选框将以自定义样式显示/隐藏文档的一部分。
我打算根据复选框值设置值Style.Font.Hidden = True / False,但是......
我发现有3种控件:
传统控制 - 这看起来很丑陋。
ActiveX控件 - 我可以轻松地附加到复选onChange事件,但这些也很难看,我认为它不那么安全,也可能现在正在使用mac。
ContentControls - 这似乎是正确的方法,但我无法附加到正确的事件。 (还有一些XML附件描述,但我没有使用它,这看起来太复杂了,我不知道。)
你能告诉我如何使用CheckBox ContentContol的onChange事件吗?我需要像它的ActiveX CheckBox一样的行为。
答案 0 :(得分:3)
内容控制没有" onChange"事件,因此您无法以简单的方式使内容控件像ActiveX复选框一样运行。与表单字段类似,当进入/退出控件时,将触发ContentControls的代码。
模仿" onChange"的唯一方法对于内容控件,将内容控件链接到文档中CustomXMLPart中的节点,然后使用Document_ContentControlBeforeStoreUpdate事件,该事件将在CustomXMLPart中的节点内容发生更改时触发。
如果您的问题表明,这对您来说太复杂了,您可以使用MacroButton字段显示看起来像复选框的字体字符(符号)。单击该字段会将该字符替换为另一个字符,该字符看起来已选中。然后再次反向进行下一次点击。这里有一些示例代码可以帮助您入门。如果您不喜欢我选择的复选框,您可以从“插入/符号/符号”中选择其他内容。只需更改字符编号和字体名称。
默认情况下,双击时会触发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