我在这做错了什么?我需要用复选框替换各种字符但是会出错:
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。抱怨我的帖子主要是代码并添加一些解释但是真的没有什么可说的了所以我只是提前说谢谢!
答案 0 :(得分:3)
我不认为实际行是问题所在。如果您单步执行代码,您将看到正在插入复选框。更基本的问题是您创建了一个无限循环。 Do循环没有退出条件,因此您的代码可能正在运行,直到它崩溃Word。
****编辑注意正确的解决方案:****
解决方案是删除wdContentControlCheckBox周围的括号。在VBA中,括号仅在函数的参数周围放置,当它返回的结果被赋值给变量时。
示例(函数调用将结果分配给变量,而不是将结果分配给变量):
result = SomeFunction(arg1,arg2)
或
SomeFunction arg1,arg2