Another way of automatically swapping the word order, sticking to the 'within characters' approach:
Code:
Sub Demo()
Application.ScreenUpdating = False
Dim i As Long, j As Long, StrFnd As String
StrFnd = InputBox("Please input the Find paramenters, as:" & vbCr & _
"word1|word2|x,y" & vbCr & _
"where:" & vbCr & _
"'x' is the minimum intervening character count and" & vbCr & _
"'y' is the maximum intervening character count.")
For i = 1 To 2
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "<" & Split(StrFnd, "|")(1 - i Mod 2) & ">?{" & Split(StrFnd, "|")(2) & "}<" & Split(StrFnd, "|")(2 - i) & ">"
.Replacement.Text = ""
.Forward = True
.Format = False
.Wrap = wdFindStop
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
j = j + 1
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Next
Application.ScreenUpdating = True
MsgBox j & " instances found."
End Sub