问题
I have a program that highlights all the words between a start and end point and loops through the extract to find the same conditions. Program works well, except it does not stop looping. I have to break the running program to stop it. can someone please help me write up a condition that says if the end is reached and the start and end condition don't to exist, to stop the program.
Sub SomeSub1()
Dim StartWord As String, EndWord As String
Dim Find1stRange As range, FindEndRange As range
Dim DelRange As range, DelStartRange As range, DelEndRange As range
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Setting up the Ranges
Set Find1stRange = ActiveDocument.range
Set FindEndRange = ActiveDocument.range
Set DelRange = ActiveDocument.range
'Set your Start and End Find words here to cleanup the script
StartWord = "From: Yussuf Ismail"
EndWord = "Kind regards"
'Starting the Find First Word
With Find1stRange.Find
.Text = StartWord
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
'Execute the Find
Do While .Execute
'If Found then do extra script
If .Found = True Then
'Setting the Found range to the DelStartRange
Set DelStartRange = Find1stRange
'Having these Selections during testing is benificial to test your script
DelStartRange.Select
'Setting the FindEndRange up for the remainder of the document form the end of the StartWord
FindEndRange.Start = DelStartRange.End
FindEndRange.End = ActiveDocument.Content.End
'Having these Selections during testing is benificial to test your script
FindEndRange.Select
'Setting the Find to look for the End Word
With FindEndRange.Find
.Text = EndWord
.Execute
'If Found then do extra script
If .Found = True Then
'Setting the Found range to the DelEndRange
Set DelEndRange = FindEndRange
'Having these Selections during testing is benificial to test your script
DelEndRange.Select
End If
End With
'Selecting the delete range
DelRange.Start = DelStartRange.Start
DelRange.End = DelEndRange.End
'Having these Selections during testing is benificial to test your script
DelRange.Select
DelRange.HighlightColorIndex = wdPink
'Remove comment to actually delete
End If 'Ending the If Find1stRange .Found = True
Loop 'Ending the Do While .Execute Loop
End With 'Ending the Find1stRange.Find With Statement
End Sub
回答1:
It keeps on going because of the Application.DisplayAlerts = False
This will remove the "Search has reached the end of the document. Do you want to continue searching at the beginning?" message.
If you remove the Application.DisplayAlerts = False
then it will stop at the end of the document and that message will pop up.
Also change the following in the initial Find
:
.Wrap = wdFindAsk
To
.Wrap = wdFindStop
this will then not ask the question and just stop the Find
.
来源:https://stackoverflow.com/questions/35063151/i-need-to-create-a-stopping-condition-for-my-program