![]() |
|
#1
|
|||
|
|||
|
Hello!
I have raw text in a .txt file that I am hoping to format using VBA. I haven't touched this stuff in over a decade so I am struggling very much and am looking for some pointers! My raw text looks something like this: Code:
@ALB = <Text that needs to be bolded> @TRI = <Text that needs to be Italicized> @QIU = <Text that needs to be Underlined> @ALB = <Text that needs to be bolded> @ALB = <Text that needs to be bolded> @FSF = <Text that needs Font change> After the text has been appropriately formatted, the code will also need to delete the tag portion (ie. "@ALB = ") so that only the formatted text remains, but I haven't gotten this far with my code. Can you please let me know if I am on the right track? My code was working but began giving errors as my evening progressed and I'm currently getting error 5834. Code:
Sub TextChanger()
Application.ScreenUpdating = False
Dim StrFind As String, StrStyle As String, i As Long
StrFind = "ALB,TRI,QIU,FSF"
StrStyle = "ALB,TRI,QIU,FSF"
With ActiveDocument.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Format = True
.Wrap = wdFindContinue
.MatchWildcards = True
For i = 0 To UBound(Split(StrFind, ","))
.Text = "@" & Split(StrFind, ",")(i) & " = " & "[A-Za-z]*$"
.Replacement.Style = Split(StrStyle, ",")(i)
.Execute Replace:=wdReplaceAll
Next i
End With
Application.ScreenUpdating = True
End Sub
![]() |
|
#2
|
||||
|
||||
|
The most obvious error would be the Paragraph styles not existing. Since you are opening a txt file it will contain only built-in stylenames and the styles you are trying to apply are not built-in names.
So your macro should either create those styles or import them from a template that does contain them. I've added a line to import the styles from the attached template - this will be Normal.dotm unless you have configure the attached template differently. You don't need wildcards if the styles are Paragraph styles - the entire paragraph will get the style if you apply it this way. Code:
Sub TextChanger()
Dim arrFind() As String, i As Long
'Application.ScreenUpdating = False
ActiveDocument.UpdateStyles 'import styles from attached template
arrFind = Split("ALB,TRI,QIU,FSF", ",")
With ActiveDocument.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Format = True
.Wrap = wdFindContinue
.MatchWildcards = False
For i = LBound(arrFind) To UBound(arrFind)
.Text = "@" & arrFind(i)
.Replacement.Style = arrFind(i)
.Execute Replace:=wdReplaceAll
Next i
End With
'Application.ScreenUpdating = True
End Sub
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
|
#3
|
||||
|
||||
|
If the styles exist in the document and the document is laid out as shown, try the following
Code:
Sub TextChanger()
Dim i As Long
Const StrFind As String = "ALB,TRI,QIU,FSF"
On Error Resume Next
Application.ScreenUpdating = False
For i = 0 To UBound(Split(StrFind, ","))
With ActiveDocument.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Format = True
.Wrap = wdFindContinue
.MatchWildcards = True
.Text = "\@" & Split(StrFind, ",")(i) & " = (*^13)"
.Replacement.Style = Split(StrFind, ",")(i)
.Replacement.Text = "\1"
.Execute Replace:=wdReplaceAll
End With
Next i
Application.ScreenUpdating = True
End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Format cell and add a comment based on another tab | Catluvr | Excel Programming | 8 | 08-03-2018 09:54 AM |
Format Multiple Textboxes Based On the Contents of One Text Box
|
dmcgettigan | Word VBA | 1 | 02-27-2017 08:50 PM |
Format Text based on use elsewhere
|
Rtowey | Excel | 1 | 07-21-2015 06:05 AM |