使用Word标头中的range.find,Word VBA获取运行时错误91

时间:2017-09-27 00:15:45

标签: vba ms-word

我在以下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项目上失败,而不是文档正文。这可能是问题吗?

1 个答案:

答案 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