Quote:
Originally Posted by grahamsims
Charles - looking at your solution again, which works beautifully, can you explain why within the first For…Next group there are two If statements but only one End If, whereas in the next For…If group there are a similar two If statements but two End Ifs?
|
This is an example of programming cobbled together. I started with Graham's excellent code. The second End If is a mistake.
If the "Then" part of an IF statement is on the same line, no End If is needed.
That second End If should throw an error.
The corrected code is:
Code:
Sub RefBrokenRemove2()
'Graham Mayor - https://www.gmayor.com - Last updated - 02 Dec 2020
'https://www.msofficeforums.com/word/46089-macro-delete-cross-reference-error-message-when.html
' Remove broken Cross-Reference Fields
' Modified by Charles Kenyon to first update ref fields
'
Dim i As Integer
Dim oStory As range
For Each oStory In ActiveDocument.StoryRanges
For i = oStory.Fields.Count To 1 Step -1
If oStory.Fields(i).Type = wdFieldRef Then
oStory.Fields(i).Update
If oStory.Fields(i).Result = "Error! Reference source not found." Then oStory.Fields(i).Delete
End If
Next i
If oStory.StoryType <> wdMainTextStory Then
While Not (oStory.NextStoryRange Is Nothing)
Set oStory = oStory.NextStoryRange
For i = oStory.Fields.Count To 1 Step -1
If oStory.Fields(i).Type = wdFieldRef Then
oStory.Fields(i).Update
If oStory.Fields(i).Result = "Error! Reference source not found." Then oStory.Fields(i).Delete
End If
Next i
Wend
End If
Next oStory
lbl_Exit:
Set oStory = Nothing
Exit Sub
End Sub