![]() |
#1
|
|||
|
|||
![]()
Hello there! I'm trying to create a a macro that
- finds interjections from a list, like 'uh' or 'ah', - with its punctuation, so it can be 'uh,' or 'uh!' or 'uh?', - and then turns the interjection and its punctuation both italic. BUT it cant italicize the 'ah' portion of a word like 'dahlia' It has to work to both uppercase and lowercase and keep the case I can do it with lots of find/replace recorded in a macro, but I would like a more elegant solution that I can add new interjections easily. I created a macro that almost worked, but it doesnt allow me to use < to mark the beginning of the word, so it always italicize 'ah' inside other words, like 'dahlia' I'm not a programmer, so I rely on solutions I find in the web, but couldnt find one to do this to me... Any suggestion? My tries: lots of this, one to each interjection - insane to keep Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Font.Italic = True With Selection.Find .Text = "<ah?" .Replacement.Text = "^&" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With AND this one, that replaces AH inside DAHLIA Sub test() Const strList As String = "ah^?|uh^?" Dim vChar As Variant Dim i As Long Dim oRng As Range vChar = Split(strList, "|") For i = LBound(vChar) To UBound(vChar) Set oRng = ActiveDocument.Range With oRng.Find Do While .Execute(vChar(i)) oRng.Start = oRng.Start - 1 If oRng.Font.Italic = Not True Then oRng.Font.Italic = True End If oRng.Collapse 0 Loop End With Next i lbl_Exit: Exit Sub |
#2
|
||||
|
||||
![]()
Rather than re-invent the wheel, take a look at Document Batch Processes and its Find and Replace (with table defined formatting) option.
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#3
|
|||
|
|||
![]()
Hello there. Thanks for the tip, but as far as I could see, to replace all the interjections with all the pontuaction that may follow them, I have to add them multiple times, like ah! ah. ah... ah? ah, - not a single time for each, and one for each case AH! AH. AH... AH? AH, - and maybe one more if it has mixed case, like Ah! - am I right?
If I could use '<' in the second example, to mark the beginning of the word, it would work (I guess), but it doesnt accept the '<' wildcard. |
#4
|
||||
|
||||
![]()
That would be the principle. However you could use wildcards with minimal iterations in a macro using wildcards Replace using wildcards e.g.
Code:
Sub Macro1() Const sFind As String = "<ah[\!\?\,.]{1,}|<AH[\!\?\,.]{1,}|<Ah[\!\?\,.]{1,}" Const sRepl As String = "^&" Dim oRng As Range Dim vFind As Variant Dim i As Integer vFind = Split(sFind, "|") For i = 0 To UBound(vFind) Set oRng = ActiveDocument.Range With oRng.Find Do While .Execute(findText:=vFind(i), _ MatchWildcards:=True, _ ReplaceWith:=sRepl) oRng.Font.Italic = True oRng.Collapse 0 Loop End With Next i End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#5
|
|||
|
|||
![]()
Thank you very much, it works for me if I take out the {1,} in Const sFind As String = "<ah[\!\?\,.]{1,}|<AH[\!\?\,.]{1,}|<Ah[\!\?\,.]{1,}"
It doesn't run if it has this bit, it gives me Error 5560. Without it, it works! Why? I have no clue. I will try to work a bit more on it, thanks for the light. |
#6
|
||||
|
||||
![]()
Try instead
Code:
Dim sFind As String sFind = "<ah[\!\?\,.]{1,}|<AH[\!\?\,.]{1,}|<Ah[\!\?\,.]{1,}"
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#7
|
|||
|
|||
![]()
Still gaves error 5560 ><
Looking around I found it may be because my system language is not set to English. |
#8
|
||||
|
||||
![]()
In that case change the commas in {1,} to your local list separator character - almost certainly a semi-colon thus {1;}
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#9
|
|||
|
|||
![]()
Success! Thank you very much for your time ♥
|
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
DRD992 | Word VBA | 15 | 06-17-2023 05:06 AM |
![]() |
trevorc | Excel Programming | 2 | 11-24-2021 06:51 PM |
Find - Replace Macro using a table list | mdw | Word | 0 | 08-01-2013 04:36 PM |
![]() |
jperez84 | Word VBA | 10 | 09-19-2012 04:48 PM |
![]() |
Jaffa | Excel | 1 | 10-23-2010 02:39 PM |