在Word中按任何复选框时运行宏

时间:2018-06-05 17:17:02

标签: checkbox ms-word word-vba

我想为未知数量的复选框启用通用代码来更改行的格式样式。我有多行带有一个复选框,我需要检查以将该行设置为正常,并取消选中以将格式设置为标题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,所以我觉得我在做错代码时做错了什么?

2 个答案:

答案 0 :(得分:0)

您正在使用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

答案 1 :(得分:0)

如果,并且实际上仍然需要使用输入以使其工作,则会错过结束。代码触发的问题是因为我把它放在模块>宏而不是在文档中。正确的代码:

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