![]() |
|
#1
|
|||
|
|||
|
Is it possible to have a VBA routine check a sentence and add two styles.
With the string below, the part before the first comma should be bold, and the part between the first and second comma should be italics. Before AFC 39-101, A Reference book, 23 August 2018 DAB 10-211, Automotive Manual, 16 January 2009 After AFC 39-101, A Reference book, 23 August 2018 DAB 10-211, Automotive Manual, 16 January 2009 |
|
#2
|
||||
|
||||
|
Assuming each reference reflects a paragraph then put the cursor in the paragraph and the following will apply built in character styles top the relative parts of the paragraph.
Code:
Sub FormatReferencePara()
Dim oRng As Range
Dim oStart As Range
Set oStart = Selection.Range
Set oRng = Selection.Paragraphs(1).Range
oRng.Collapse 1
oRng.MoveEndUntil Chr(44)
oRng.End = oRng.End + 1
oRng.Style = "Strong"
oRng.Collapse 0
oRng.MoveEndUntil Chr(44)
oRng.End = oRng.End + 1
oRng.Style = "Subtle Emphasis"
oStart.Select
lbl_Exit:
Set oRng = Nothing
Set oStart = Nothing
Exit Sub
End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#3
|
|||
|
|||
|
Thanks Graham. This works great.
It did not appear that this macro was looping thru the entire selection, so I did my best to update it to a For next statement and this seems to work great. I didn't want the comma's to take on the applied format, so I removed the oRng.End part. All seems to work well and I appreciate your time. Code:
Sub FormatReferencePara()
Dim oPara As Paragraph
Dim oRng As Range
Dim oSel As Range
Set oSel = Selection.Range
For Each oPara In oSel.Paragraphs
Set oRng = oPara.Range
oRng.Collapse 1
oRng.MoveEndUntil Chr(44)
' oRng.End = oRng.End
oRng.Style = "Strong"
oRng.Collapse 0
oRng.MoveEndUntil Chr(44)
' oRng.End = oRng.End
oRng.Style = "Subtle Emphasis"
oSel.Select
Next oPara
lbl_Exit:
Set oRng = Nothing
Set oSel = Nothing
Exit Sub
End Sub
|
|
#4
|
|||
|
|||
|
So apparently I don't understand the parts in blue. This code is applying the character styles to the commas also. I thought the parts in blue were formatting the commas also, but apparently not.
1) How can I stop the commas from retaining the character styles applied by the code? 2) How can the code skip the paragraph if the number of commas does not equal two? Before AFC 39-101, A Reference book, 23 August 2018 DAB 10-211, Automotive Manual, 16 January 2009 XYZ 39-101, Instruction cards XYZ 39-101, Volume 1, Instruction cards, 23 December 2015 After AFC 39-101, A Reference book, 23 August 2018 DAB 10-211, Automotive Manual, 16 January 2009 XYZ 39-101, Instruction cards (no format < 2 commas) XYZ 39-101, Volume 1, Instruction cards, 23 December 2015 (no format > 2 commas) Code:
Sub FormatReferencePara()
Dim oPara As Paragraph
Dim oRng As Range
Dim oSel As Range
Set oSel = Selection.Range
For Each oPara In oSel.Paragraphs
Set oRng = oPara.Range
oRng.Collapse 1
oRng.MoveEndUntil Chr(44)
oRng.End = oRng.End + 1
oRng.Style = "Strong"
oRng.Collapse 0
oRng.MoveEndUntil Chr(44)
oRng.End = oRng.End + 1
oRng.Style = "Subtle Emphasis"
oSel.Select
Next oPara
lbl_Exit:
Set oRng = Nothing
Set oSel = Nothing
Exit Sub
End Sub
|
|
#5
|
||||
|
||||
|
Try:
Code:
Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[A-Z]{3} [0-9]{2}-[0-9]{3},[!^13]@[0-9]{4}^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
If Len(Replace(.Text, ",", "")) = Len(.Text) - 2 Then
With .Duplicate
.End = .Start + InStr(.Text, ",") - 1
.Style = "Strong"
End With
With .Duplicate
.Start = .Start + InStr(.Text, ",") + 1
.End = .Start + InStrRev(.Text, ",") - 1
.Style = "Emphasis"
End With
End If
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#6
|
|||
|
|||
|
That works great Paul. Thanks.
|
|
#7
|
||||
|
||||
|
You might also be interested in:
Code:
Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[A-Z]{3} [0-9]{2}-[0-9]{3},[!^13]@[0-9]{4}^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
With .Duplicate
.End = .Start + InStr(.Text, ",") - 1
.Style = "Strong"
End With
With .Duplicate
.End = .Start + InStrRev(.Text, ",") - 1
.Start = .Start + InStrRev(.Text, ",")
.Style = "Emphasis"
End With
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Does a new set of styles in a template overwrite or remove the existing set of styles in a document? | dianahbr | Word | 6 | 03-27-2018 11:12 PM |
| Two much blank space between names of styles in the Styles Pane | PereCasanellas | Word | 0 | 10-06-2017 03:47 AM |
| Question about spacing between multi-level bullet styles (and other styles) | SDwriter | Word | 0 | 09-26-2017 09:39 AM |
Delete does not bring second sentence closer to first sentence
|
Andoheb | Word | 29 | 07-03-2014 01:48 PM |
Quick Styles Set saved but it doesnt appear at the styles list!
|
Pedro77 | Word | 3 | 10-15-2011 05:17 AM |