我在以下Word VBA上收到运行时错误91:
Dim myStoryRange As Object
For Each myStoryRange In ActiveDocument.StoryRanges
With myStoryRange.find
.Text = "test to search"
.Replacement.Text = "text to replace"
.Wrap = wdFindContinue
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Highlight = False
.Execute replace:=wdReplaceAll
End With
Next myStoryRange
大约一半运行宏的计算机上的错误发生不一致。
思想?
Per PatricK的建议我已将代码更改为:
Dim myStoryRange As Range
For xStories = 1 To ActiveDocument.StoryRanges.Count
Set myStoryRange = ActiveDocument.StoryRanges.Item(xStories)
With myStoryRange.find
.Text = "[Client Name]"
.Replacement.Text = Client
.Wrap = wdFindContinue
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Highlight = False
.Execute replace:=wdReplaceAll
End With
Next xStories
这似乎解决了错误91.但是,我仍然得到一个奇怪的结果。此代码在第5行(使用myStoryRange.find)失败,并在集合中的第二项上显示错误“集合的请求成员不存在”。
当有集合成员时失败。换句话说,有7个xStories,它在xStories = 2时失败。而xStories = 2是一个完整的项目,其中引用了所有属性。
作为一个FYI,我正在尝试替换文档标题中的一些文本。我在标题中的StoryRange项目上失败,而不是文档正文。这可能是问题吗?
答案 0 :(得分:0)
我能够解决这个问题(在评论员的帮助下)。答案是标题文本被视为Sections集合中的项目。这似乎不一致,因为它确实显示在StoryRanges中的项目。但是,在使用该集合查找和替换时出现错误。
以下代码正确搜索并替换Word标题中的文本:
Dim myStoryRange As Range
For xStories = 1 To ActiveDocument.Sections(1).Headers.Count
Set myStoryRange =
ActiveDocument.Sections(1).Headers.Item(xStories).Range
With myStoryRange.find
.Text = "[Client Name]"
.Replacement.Text = Client
.Wrap = wdFindContinue
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Highlight = False
.Execute replace:=wdReplaceAll
End With
Next xStories