我无法理解为什么While ... Wend循环在这个宏中不起作用。不可否认,虽然...... Wend不是我的强项,所以就是这样。但无论如何,这就是我想要完成的事情:
我会在文档的末尾有一个单词或短语列表(每个单独或单独一行)。我希望宏在文档中搜索每个单词并应用黄色突出显示。所以这就是我尝试创建的过程:
我已经将宏分解为临时宏中的单步递增,并且我还得到了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
用于测试宏的示例文本
这是一个段落的示例,其中包含一些我要强调的单词。这里有更多的话。我希望我能让这个宏工作。我失去了理智,我的宗教试图解决它!这是一个段落的例子,其中包含一些我要强调的单词。
还有更多的话。我希望我能让这个宏工作。我失去了理智,我的宗教试图解决它!这是一个段落的例子,其中包含一些我要强调的单词。这里有更多的话。我希望我能让这个宏工作。我失去了理智,我的宗教试图解决它!
下面
例如
段
也就是说
宏
答案 0 :(得分:1)
ThunderFrame通过以下回复回复了我的问题:
听起来你可能不知道使用Find,当整个当前选择是你正在寻找的确切文本时,将向下看,即使它在文档中较早
它有效!
我在这里发布他的答案是因为我没有看到任何选项来支持他的评论并将问题标记为已解决。所以希望,这让我可以选择这样做。
非常感谢,ThunderFrame!