1

我的 Word 2010 文档中有邮件合并字段,其中包含一个复选框控件,该控件是否被选中取决于输入列表中的内容。

{IF NEW = "NEW" "☒" "☐"} 这些框实际上是复选框控件

但是,邮件合并完成后,复选框控件将根据需要替换为选中或未选中框的符号。因此,在最终文档中不能再从选中状态切换到未选中状态,就像在复选框控件中所做的那样。

这里提出了一个类似的问题,但没有得到解决(一个解决方案的回复对我不起作用)。

我正在寻找一种简单的方法来在输出文档中找到选中或未选中的符号,并将其替换为处于适当状态的复选框文档控件。

我不擅长编程,但如果你能指出我正确的方向,我会尽力而为。我过去曾玩过 VB 宏(非常业余),所以我再次尝试并得到了这个“概念证明”:

Sub Checkbox()
' ChrW(9744) is unchecked box; 9746 is checked box
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ChrW(9744)
        .Replacement.Text = ChrW(9746)
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.HomeKey Unit:=wdStory
End Sub

我还找到了添加复选框控件的方法:

Selection.Range.ContentControls.Add (wdContentControlCheckBox)

但是我还没有想出如何将最后一段代码结合到“替换”行中,也没有弄清楚如何根据搜索将复选框定义为选中或不选中。

谢谢您的帮助。

4

2 回答 2

0

对于 Office 2010,可以使用更高级的复选框控件来支持格式设置。这样做的代码是:

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Do
  With Selection.Find
    .Text = ChrW(9744)
    .Forward = True
    .Wrap = wdFindStop 'wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  If Selection.Find.Execute = False Then Exit Do
  ' This adds the checkbox at the selected position
  Set f = Selection.Range.ContentControls.Add(wdContentControlCheckBox)
  f.SetCheckedSymbol CharacterNumber:=254, Font _
        :="Wingdings"
  f.SetUncheckedSymbol CharacterNumber:=168, _
        Font:="Wingdings"
  f.Checked = False' Change this for checked checkboxes
Loop
于 2017-10-17T11:47:52.003 回答
0

您可以执行以下操作:

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Do
  With Selection.Find
    .Text = ChrW(9744) ' ChrW(9746)
    .Forward = True
    .Wrap = wdFindStop 'wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  If Selection.Find.Execute = False Then Exit Do
  ' This adds the checkbox at the selected position
  Set f = ActiveDocument.FormFields.Add(Range:=Selection.Range, _
                                        Type:=wdFieldFormCheckBox)      
  'f.CheckBox.Value = True ' Add this for checked checkboxes
Loop
于 2016-10-29T10:29:44.667 回答