Wend语句不起作用时的Word VBA

时间:2017-12-17 05:11:02

标签: vba ms-word word-vba

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

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

  1. 当我调用宏时,假设我在第一个单词上。
  2. 评估第一个字符。如果它是空行,则不执行任何操作并退出宏;如果有单词或短语,请选择它,将其存储为FRText。
  3. 删除该行,创建书签,使用F / R查找并突出显示该文本。
  4. 冲洗并重复,直到没有其他词语。
  5. 我已经将宏分解为临时宏中的单步递增,并且我还得到了While ... Wend语句,以便在更简单的"之间使用#34;步骤,没有问题(例如,代替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
    

    用于测试宏的示例文本

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

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

    下面
    例如

    也就是说

1 个答案:

答案 0 :(得分:1)

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

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

它有效!

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

非常感谢,ThunderFrame!