Word VBA虽然Wend语句不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Word VBA虽然Wend语句不起作用相关的知识,希望对你有一定的参考价值。

我无法理解为什么While ... Wend循环在这个宏中不起作用。不可否认,虽然...... Wend不是我的强项,所以就是这样。但无论如何,这就是我想要完成的事情:

我将在文档的末尾列出单词或短语(每个单独或短语在一个单独的行上)。我希望宏在文档中搜索每个单词并应用黄色突出显示。所以这是我正在尝试创建的过程:

  1. 当我调用宏时,假设我在第一个单词上。
  2. 评估第一个字符。如果是空行,则不做任何事情并退出宏;如果有单词或短语,请选择它,将其存储为FRText。
  3. 删除该行,创建书签,使用F / R查找并突出显示该文本。
  4. 冲洗并重复,直到没有更多的话。

我已经将宏分解为临时宏中的单步递增,并且我还得到了While ... Wend语句以更简单的“中间”步骤,没有问题(例如,而不是F / R操作,测试单词与空行,如果单词,粗体文本,如果为空,退出),它们都工作正常。

但是当我把它放在“真正的宏”中时,每次都会发生同样的混乱:它编译得很好,但是当我运行它时,我得到一个调试错误。在我点击调试后,它会运行宏或三个或四个单词(正确),调试器将在宏中的不同随机点停止,没有押韵或原因,也没有提示是什么问题。

此外,如果我在列表中的最后一个单词上执行宏,它可以正常工作。如果我将光标放在文档中的空行上,它也可以正常工作(什么都不做,就像它应该的那样)。

我很难过。我在Google上搜索了有关While ... Wend循环的示例和信息,看看我是否能找到解释。我也搜查了我的书。但我尝试过的任何东西似乎都没有用。我正在祈祷奇迹,有人可以看到这一点,并立即看到我做错了什么!

下面的宏,以及一些要复制的示例文本,如果有人感觉倾向于测试它。提前致谢!

使


    Sub FindAndHighlightList()

        Dim FRText As String
        Dim iCount As Integer

    Application.ScreenUpdating = False


    'Begin with cursor on first word in "find list."
    'Repeat the following action until no more words are found in the list
    'iCount is precautionary measure in case macro gets hung in the loop

    While Not Selection.Characters(1) = Chr(13) And iCount < 1000
                iCount = iCount + 1

    'Select the current line of text, minus the paragraph mark; store it as FRText; then delete it

        Selection.HomeKey Unit:=wdLine
        Selection.EndKey Unit:=wdLine, Extend:=wdExtend
        Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend

        FRText = Selection.Text

        Selection.EndKey Unit:=wdLine, Extend:=wdExtend
        Selection.Delete Unit:=wdCharacter, Count:=1

    'Create a temporary bookmark

        With ActiveDocument.Bookmarks
            .Add Range:=Selection.Range, Name:="TempX"
            .DefaultSorting = wdSortByName
            .ShowHidden = True
        End With

    'Find the selected text and replace add yellow highlight

        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        Options.DefaultHighlightColorIndex = wdYellow
        Selection.Find.Replacement.Highlight = True
        With Selection.Find
            .Text = FRText
            .Replacement.Text = FRText
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = True
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll

    'Go to TempX bookmark location

        Selection.GoTo What:=wdGoToBookmark, Name:="TempX"

    Wend

    If Selection.Characters(1) = Chr(13) Then Exit Sub

        Application.ScreenUpdating = True

    End Sub

用于测试宏的示例文本

这是一个段落的例子,其中包含一些我要强调的单词。这里有更多的话。我希望我能让这个宏工作。我正在失去理智,我的宗教试图解决它!这是一个段落的例子,其中包含一些我要强调的单词。

这里有更多的话。我希望我能让这个宏工作。我正在失去理智,我的宗教试图解决它!这是一个段落的例子,其中包含一些我要强调的单词。这里有更多的话。我希望我能让这个宏工作。我正在失去理智,我的宗教试图解决它!

这里 例 段 话 宏

答案

ThunderFrame通过以下回复回复了我的问题:

听起来你可能不知道使用Find,当整个当前选择是你正在寻找的确切文本时,将向下看到下一个出现,即使它在文档中较早

它奏效了!

我在这里发布他的答案,因为我没有看到任何选项来支持他的评论并将问题标记为已解决。所以希望,这让我可以选择这样做。

非常感谢,ThunderFrame!

以上是关于Word VBA虽然Wend语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Excel中的VBA - 如果语句计数器不起作用

Excel VBA:错误 Goto 语句在 For-Loop 中不起作用

VBA Excel ADO SQL 更新查询不起作用

VB中 while .....wend 与 DO while.....loop区别

Select Case 语句 - IF 语句 - 定义数组 - VBA

xmlnode 代码不起作用 - 访问 vba