以编程方式添加复选框

时间:2017-03-02 17:18:29

标签: vba ms-word

我在这做错了什么?我需要用复选框替换各种字符但是会出错:

Sub ReplaceCheckboxes()

Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Do
  With Selection.Find
    .Text = ChrW(13)
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = True
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  Selection.Range.ContentControls.Add (wdContentControlCheckBox) ' error on this line
  If Selection.Find.Execute = False Then Exit Do
Loop

Selection.HomeKey Unit:=wdStory

End Sub

我在第Selection.Range.ContentControls.Add (wdContentControlCheckBox)行上获得“对象不支持此操作”。我也试过了

Set objCC = ActiveDocument.ContentControls.Add(wdContentControlCheckBox)

ActiveDocument.ContentControls.Add wdContentControlCheckBox, Selection.Range

我想我误解了find方法的工作原理。

S.O。抱怨我的帖子主要是代码并添加一些解释但是真的没有什么可说的了所以我只是提前说谢谢!

1 个答案:

答案 0 :(得分:3)

我不认为实际行是问题所在。如果您单步执行代码,您将看到正在插入复选框。更基本的问题是您创建了一个无限循环。 Do循环没有退出条件,因此您的代码可能正在运行,直到它崩溃Word。

****编辑注意正确的解决方案:****

解决方案是删除wdContentControlCheckBox周围的括号。在VBA中,括号仅在函数的参数周围放置,当它返回的结果被赋值给变量时。

示例(函数调用将结果分配给变量,而不是将结果分配给变量):

result = SomeFunction(arg1,arg2)

SomeFunction arg1,arg2