【问题标题】:Run a macro when any checkbox is hit in Word在 Word 中点击任何复选框时运行宏
【发布时间】:2020-07-04 20:31:17
【问题描述】:

我想为未知数量的复选框触发通用代码以更改行的格式样式。我有多行以复选框开头,我希望选中以将行设置为正常,并取消选中以将格式设置为标题 2。

Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl)

If ContentControl.Checked = True Then
    Selection.Style = ActiveDocument.Styles("Normal")
ElseIf contextcontrol.Checked = False Then
    Selection.Style = ActiveDocument.Styles("Heading 2")
End If

End Sub

选中一个框会将光标设置在该行上,所以我希望这个策略能够奏效。我从来没有在 Word 中使用过 vba,所以我认为我只是在触发代码方面做错了吗?

【问题讨论】:

  • 当您离开一个内容控件并进入另一个内容控件时,代码是否运行?内容控件的反应方式与表单字段的反应方式相同:当您选中/取消选中时它们不会做出反应,当您离开(或进入)内容控件时它们会做出反应......(注意:它可能不会做您希望它做的事情,但首先我们需要知道代码正在触发)。
  • 是的,你是对的。代码没有触发。我错过了一些我不知道的设置吗?
  • 它驻留在哪个代码模块中?是在ThisDocument 还是其他地方?还有一个简单的检查方法:在顶部添加MsgBox "Test" 行。如果您没有收到消息,您就知道什么都没有触发。并且一定要从内容控制到内容控制,而不是从控制到正文。
  • 是的,我把它放在宏下。一旦我把它放在 ThisDocument 下,我就能够让它工作。谢谢!

标签: vba checkbox ms-word


【解决方案1】:

您正在使用 ContentControlOnEnter 宏,它只告诉您选择内容控件时的状态,而不是您可能将其更改为的状态。对于后者,您需要一个 ContentControlOnExit 宏 - 并在选中/取消选中复选框后退出内容控制。此外,您应该检查内容控件的类型,以便在内容控件不是复选框时不会抛出错误。例如:

Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean)
With CCtrl
  If .Type = wdContentControlCheckBox Then
    If .Checked = True Then
      .Range.Paragraphs.First.Style = wdStyleNormal
    Else
      .Range.Paragraphs.First.Style = wdStyleHeading2
    End If
  End If
End With
End Sub

【讨论】:

  • 您的示例代码抛出错误:编译错误:过程声明与具有相同名称的事件或过程的描述不匹配
  • @Reece - sub 缺少“取消为布尔值”。已添加。
【解决方案2】:

如果没有结束,实际上仍然需要在 enter 上使用它才能工作。代码触发的问题是因为我将其放在 Modules > Macros 下而不是文档中。正确代码:

Private Sub Document_ContentControlOnEnter(ByVal CCtrl As ContentControl)
With CCtrl
  If .Type = wdContentControlCheckBox Then
    If .Checked = True Then
      .Range.Paragraphs.First.Style = wdStyleNormal
    Else
      .Range.Paragraphs.First.Style = wdStyleHeading2
    End If
  End If
End With
End Sub

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多