Vba 如何在Word中查找/替换带有复选框控件的符号

Vba 如何在Word中查找/替换带有复选框控件的符号,vba,ms-word,mailmerge,word-contentcontrol,Vba,Ms Word,Mailmerge,Word Contentcontrol,我的Word 2010文档中有一个邮件合并字段,该字段包含一个复选框控件,该控件是否选中取决于输入列表中的内容 {IF NEW=“NEW”☒" "☐"} 这些框实际上是复选框控件的位置 但是,邮件合并完成后,复选框控件将根据需要替换为选中或未选中框的符号。因此,无法再像复选框控件那样在最终文档中从选中切换到未选中 有一个类似的问题,但没有解决(一个答案对我来说不起作用) 我正在寻找一种简单的方法,在输出文档中查找选中或未选中的符号,并将其替换为处于适当状态的复选框文档控件 我对编程不是很在行,但

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

{IF NEW=“NEW”☒" "☐"} 这些框实际上是复选框控件的位置

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

有一个类似的问题,但没有解决(一个答案对我来说不起作用)

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

我对编程不是很在行,但如果你能给我指出正确的方向,我会尽我最大的努力。我过去玩过VB宏(非常业余),所以我再次尝试,并将其作为“概念证明”:

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

Selection.Range.ContentControls.Add (wdContentControlCheckBox)
但我还没有弄清楚如何将最后一段代码合并到“replace”行中,也没有弄清楚如何根据搜索结果将复选框定义为选中或不选中


谢谢您的帮助。

您可以执行以下操作:

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

对于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

这与
Selection.Range.ContentControls.Add
似乎会替换找到的文本,而
ActiveDocument.FormFields.Add
似乎会将其插入到找到的文本之前。这是我在测试这两个方面的经验。@BerndWechner这个问题询问如何查找/替换,因此我认为在这种情况下,我的答案是正确的,并且另一个不是。。。
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