【问题标题】:Word VBA - Expand a header if a certain checkbox is ticked?Word VBA - 如果选中某个复选框,则展开标题?
【发布时间】:2019-05-22 02:36:46
【问题描述】:

使用 VB for Excel,但对 VB for Word 来说是新的。如果某个复选框被标记为 true,我不确定如何扩展标题。这是我目前拥有的代码,我收到一个运行时错误,指出集合的请求成员不存在,但我在控件的属性窗口中命名了 CheckBox。我使用的是 Microsoft Word 版本 1808(Build 10730.20262 Click-to-Run)。

Sub Macro1()

If ActiveDocument.FormFields("Licensing_1").CheckBox.Value = True Then
    Do Until Selection.Find.Found = False
        If Selection.Text Like "Licensing Discovery Questions" Then
        Selection.Find.Style = ActiveDocument.Styles("Heading 1")
        Selection.Find.Execute
            Else: Selection.Paragraphs(1).CollapsedState = True
        Selection.Find.Style = ActiveDocument.Styles("Heading 1")
        Selection.Find.Execute
    End If
Loop
End If

End Sub

【问题讨论】:

  • 您确定该复选框是 FormField 复选框吗?如果您不确定,使用哪个命令将其插入到文档中?另外,你能给我更“流行”的Word版本号吗? (2010, 2013, 2016/365...)
  • @CindyMeister 它是 Microsoft Office 365 ProPlus。我没有制作文档,但它们是复选框内容控件。我不知道这些是否被认为是同一件事。
  • 不,内容控件和表单字段相同 - 这就是您收到错误的原因。给我几分钟时间来拼凑一些示例代码,以获取内容控件复选框的值...

标签: vba checkbox ms-word expand word-contentcontrol


【解决方案1】:

与表单域不同,多个 Word 内容控件可以具有相同的名称(名称 - 实际名称为 Title)。因此,不能将字符串用作索引值 - 不能保证它是唯一的。

因此,需要使用SelectContentControlsByTitle(或SelectContentControlsByTag)方法来获取内容控制对象。该方法返回内容控件的 Collection - 所有控件都具有相同的 Title 或 Tag。 (注意:这些是区分大小写的!)。

如果代码应与所有这些内容控件一起使用,则对集合使用 For Each 循环。

如果代码只适用于一个内容控件(例如第一个),则可以使用ContentControls.Item 属性来指定。

假设文档中只有一个复选框名为“Licensing_1”:

Sub CheckBox_CC()
    Dim ccCheckBox As Word.ContentControl
    Dim doc As Word.Document

    Set doc = ActiveDocument
    Set ccCheckBox = doc.SelectContentControlsByTitle("Licensing_1").Item(1)

    If ccCheckBox.Checked Then
        'Do things here
    End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2015-12-20
    • 1970-01-01
    • 2021-12-24
    • 2022-11-27
    相关资源
    最近更新 更多