Word CheckBox ContentContol OnChange事件

时间:2015-12-06 16:23:16

标签: vba checkbox ms-word word-contentcontrol

我尝试使用两个复选框制作一个word文档,其中每个复选框将以自定义样式显示/隐藏文档的一部分。

我打算根据复选框值设置值Style.Font.Hidden = True / False,但是......

我发现有3种控件:

  • 传统控制 - 这看起来很丑陋。

  • ActiveX控件 - 我可以轻松地附加到复选onChange事件,但这些也很难看,我认为它不那么安全,也可能现在正在使用mac。

  • ContentControls - 这似乎是正确的方法,但我无法附加到正确的事件。 (还有一些XML附件描述,但我没有使用它,这看起来太复杂了,我不知道。)

你能告诉我如何使用CheckBox ContentContol的onChange事件吗?我需要像它的ActiveX CheckBox一样的行为。

1 个答案:

答案 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