Vba 以编程方式添加复选框时出错

Vba 以编程方式添加复选框时出错,vba,ms-word,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

我做错了什么?我需要用复选框替换各种字符,但出现错误:

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)


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

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

****编辑以记录正确的解决方案:***

解决方案是删除wdContentControlCheckBox周围的括号。在VBA中,只有将函数返回的结果赋给变量时,才会在函数的参数周围加括号

示例(函数调用分别将结果分配给变量和不将结果分配给变量):

结果=某个函数(arg1、arg2)


SomeFunction arg1、arg2

您应该使用
选择。下一步
替换:=wdReplaceAll
或使用每个循环将您的选择推进到当前选择的末尾。这将解决无限循环问题。我刚刚再次查看了代码&确实存在一个退出条件:
如果Selection.Find.Execute=False,则退出Do
。但我仍然认为这是一个无限循环的问题,因为这个条件永远不会导致循环退出,因为Find已经执行了。当我按原样运行代码时,它会导致Word崩溃,但如果我将False更改为True,即:
如果Selection.Find.Execute=True,则退出Do
,然后插入一个复选框,并将finishs替换为True,则不会出错。但是,我认为Peter的建议是更好的方法,因为反复运行这段代码并将更改为True会导致复选框一个接一个地插入一行,而选择不会前进。感谢您的评论,但循环不是问题所在。此行导致错误Selection.Range.ContentControls.Add(wdContentControlCheckBox)是的,这就是问题所在,谢谢。也许你可以在你的答案中加上这个,以防其他人遇到这个问题?
ActiveDocument.ContentControls.Add wdContentControlCheckBox, Selection.Range