View Single Post
 
Old 10-08-2013, 09:02 AM
Designergrrl Designergrrl is offline Mac OS X Office for Mac 2011
Novice
 
Join Date: Oct 2013
Posts: 5
Designergrrl is on a distinguished road
Default Sloppy but effective

OK, here's the deal...Word Macros don't exactly execute linearly.

I eventually figured out how to write an If/Then/Else statement that mostly worked. Mostly. It didn't actually check the condition until after it replaced (wdReplaceOne). So it would change the first hyphen in a hyperlink and then go "oh, wait! This is a hyperlink!" and then it would skip any subsequent hyphens in that hyperlink.

So I ended up splitting my If/Then/Else into two separate If/Then blocks. The first one says "move on, nothing to do here," and the second one says, "aha! here's where we need a change." The code below, although cringe-worthy, does exactly what I want.

Code:
Sub replaceHyphens()
'
' Find hyphens that occur between digits and change them to en-dash, EXCEPT in hyperlinks
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "([0-9])-([0-9])"
    .Forward = True
    .Format = True
    .Wrap = wdFindContinue
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = True
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute
 End With
 Do While (Selection.Find.Found = True)
    If (Selection.Style = ActiveDocument.Styles("Hyperlink")) Then
       Selection.Move Unit:=wdSentence, Count:=1
    End If
    Selection.Find.Execute
    If (Selection.Style <> ActiveDocument.Styles("Hyperlink")) Then
        Selection.Find.Replacement.Text = "\1" & Chr$(150) & "\2"
        Selection.Find.Execute Replace:=wdReplaceOne
    End If
Loop
End Sub
Reply With Quote