![]() |
#18
|
|||
|
|||
![]()
Shelley,
The double "d" was a typo. Rather than repeating the fourth validator, the fifth validator should have been: oRng.Characters.Last.Next.Next.Next.Next.Text = " " Yes, you were very close. So close in fact that I copied your code into the procedure and it worked fine. Now, when you run the revised code in the attached document you are going to get an error message. I will leave it to you to figure out why and how you want to handle it. Also, the next suggestion it to break your main procedure up into meaningful chunks. You have already got a process for highlighting your manual CRs. Rather than burying it is a tangle of other code, break it out into a separate procedure. This can make troubleshooting and managing your project easier. E.g., Code:
Sub MainProcedure() Application.ScreenUpdating = False 'Do things 'Do things 'Call the CompoundCR procedure for the main text then footnotes CompoundCRs ActiveDocument.Range CompoundCRs ActiveDocument.StoryRanges(wdFootnotesStory) 'Do things or call other procedures Application.ScreenUpdating = True Selection.HomeKey Unit:=wdStory MsgBox "Complete" lbl_Exit: Exit Sub End Sub Sub CompoundCRs(oRngPassed As Range) Dim strTerms As String Dim arrTerms() As String Dim lngIndex As Long, lngOffset As Long Dim bCompound As Boolean Dim oRng As Range strTerms = "[Aa]rticle,[Aa]ppendix,[Cc]lause,[Pp]aragraph,[Pp]art,[Ss]chedule" 'highlight numbers after these words arrTerms = Split(strTerms, ",") On Error GoTo Err_Handler Set oRng = oRngPassed.Duplicate 'The reason the one instance with the non-breaking space was missed is because you had a non-breaking and normal space (2 spaces) With oRng.Find .ClearFormatting .Replacement.ClearFormatting .Forward = True .Wrap = wdFindStop .MatchWildcards = True .Text = "[ ^s]{2,}" .Replacement.Text = " " .Execute Replace:=wdReplaceAll End With For lngIndex = 0 To UBound(arrTerms) Set oRng = oRngPassed.Duplicate With oRng.Find .ClearFormatting .Replacement.ClearFormatting .Forward = True .Wrap = wdFindStop .MatchWildcards = True .Text = arrTerms(lngIndex) & "[s ^s]@[0-9.]{1,}" Do While .Execute oRng.Select oRng.MoveStart wdWord, 1 oRng.HighlightColorIndex = wdBrightGreen oRng.Collapse wdCollapseEnd bCompound = True Do While bCompound Select Case True Case oRng.Characters.Last.Text = "-" oRng.Move wdCharacter, 1 lngOffset = 0 Case oRng.Characters.Last.Text = "," And oRng.Characters.Last.Next.Text = " " oRng.Move wdCharacter, 2 lngOffset = 0 Case oRng.Characters.Last.Text = " " And oRng.Characters.Last.Next.Text = "-" And oRng.Characters.Last.Next.Next.Text = " " oRng.Move wdCharacter, 3 lngOffset = 3 Case oRng.Characters.Last.Text = " " And oRng.Characters.Last.Next.Text = "t" And oRng.Characters.Last.Next.Next.Text = "o" And oRng.Characters.Last.Next.Next.Next.Text = " " oRng.Move wdCharacter, 4 lngOffset = 4 Case oRng.Characters.Last.Text = " " And oRng.Characters.Last.Next.Text = "o" And oRng.Characters.Last.Next.Next.Text = "r" And oRng.Characters.Last.Next.Next.Next.Text = " " oRng.Move wdCharacter, 4 lngOffset = 4 Case oRng.Characters.Last.Text = " " And oRng.Characters.Last.Next.Text = "a" And oRng.Characters.Last.Next.Next.Text = "n" And oRng.Characters.Last.Next.Next.Next.Text = "d" And oRng.Characters.Last.Next.Next.Next.Next.Text = " " oRng.Move wdCharacter, 5 lngOffset = 5 Case oRng.Characters.Last.Text = " " And oRng.Characters.Last.Next.Text = "a" And oRng.Characters.Last.Next.Next.Text = "n" And oRng.Characters.Last.Next.Next.Next.Text = "d" And oRng.Characters.Last.Next.Next.Next.Next.Text = "/" _ And oRng.Characters.Last.Next.Next.Next.Next.Next.Text = "o" And oRng.Characters.Last.Next.Next.Next.Next.Next.Next.Text = "r" And oRng.Characters.Last.Next.Next.Next.Next.Next.Next.Next.Text = " " oRng.Move wdCharacter, 8 lngOffset = 8 Case Else bCompound = False End Select If bCompound Then oRng.MoveEnd wdCharacter, 1 Do While IsNumeric(oRng.Characters.Last.Next) Or (oRng.Characters.Last.Next = "." And IsNumeric(oRng.Characters.Last.Next.Next)) oRng.MoveEnd wdCharacter, 1 Loop If IsNumeric(oRng.Characters.First.Text) Then oRng.HighlightColorIndex = wdBrightGreen oRng.Collapse wdCollapseEnd If lngOffset > 0 Then oRng.Move wdCharacter, -lngOffset End If End If Loop Loop End With Next_For: Next lbl_Exit: Exit Sub Err_Handler: MsgBox Err.Number & " - " & Err.Description Resume Next_For End Sub |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
teza2k06 | Excel | 8 | 02-11-2022 08:41 AM |
Converting a Select statement in Excel to an update statement | shabbaranks | Excel Programming | 5 | 10-31-2018 11:47 PM |
![]() |
cangelis | Excel | 2 | 04-08-2015 05:55 PM |
![]() |
Tony Singh | Excel | 6 | 03-04-2015 12:52 PM |
![]() |
cangelis | Excel | 4 | 01-03-2014 09:10 AM |