Solved

Apply Styles to Existing Manually Formatted Document

Posted on 2014-01-09
22
352 Views
Last Modified: 2014-01-16
Hello,
     I have a 900 page document that has manually formatted sections. I don't want to go through and change the styles for each of these sections so I can view them in the navigation pane. All the section headings have a common format of 14pt Bold Arial. Is there a way or a macro to tell Word to apply a custom style to test formatted in this way?

Thank you!
0
Comment
Question by:indigo6
  • 12
  • 9
22 Comments
 
LVL 31

Assisted Solution

by:Paul Sauvé
Paul Sauvé earned 100 total points
Comment Utility
>>All the section headings have a common format of 14pt Bold Arial.

Do all these section headings have a unique paragraph style? If so, you can use Find and Replace to modify the document.

If ONLY the section headings use 14pt Bold Arial, then you can also use Find and Replace to modify.
0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
I'd use the solution proposed by Paulsauve, however as stated it does require ONLY the section headings to be 14pt Bold Arial - i.e. Other text may also be converted.

Failing that - if you know that the start of each section has a heading (or that headings are only at the start of each section) then you could use a macro that converts the first paragraph in each section to a heading, this would be quick.

The approach below looks only at the first paragraph in each section.
Sub Headings()

Dim oSect As Section

For Each oSect In ActiveDocument.Sections
If oSect.Range.Paragraphs(1).Range.Font.Size = 14 And oSect.Range.Paragraphs(1).Range.Font.Bold = True And oSect.Range.Paragraphs(1).Range.Font.Name = "Arial" Then

oSect.Range.Paragraphs(1).Range.Style = "Heading 1"

End If
Next oSect

End Sub

Open in new window

0
 

Author Comment

by:indigo6
Comment Utility
The find and replace worked well at first, but then there were other parts of the document that happen to be 14pt Arial Bold. I'm thinking though, is it possible to maybe use regex to match? The article sections are always formatted like
ARTICLE XX – TEXT
and the sections are always:
X.X
with an optional third digit, like
X.X.X

So something like this:
(ARTICLE) (\\s+) (\\d+) (\\s+) (–) (\\s+) ((?:[a-z][a-z]+)|(\\s+))+ 

Open in new window


My regex is not strong, so I don't know for sure if that would work.

Thank you!
0
 

Author Comment

by:indigo6
Comment Utility
Actually something more like this for the article numbers:
(ARTICLE)(\s+)(\d+)(\s+)(–)(\s+)((?:[A-Z][A-Z]+)|(\s+))+

Open in new window


And then something like this for the sections:
(\d+)(\.)(\d+)(?:\.)(?:\d+)(\s+)(.*)

Open in new window


This works in my regex tester, but it doesn't seem to work in find and replace in Word using wildcards.
0
 
LVL 14

Assisted Solution

by:DrTribos
DrTribos earned 400 total points
Comment Utility
Ok... these are great when you get them working; I think word requires slightly different formatting to what you used.  Have you seen this MS this MS Office site or this on the MPV site?
0
 

Author Comment

by:indigo6
Comment Utility
I have seen those, Word's wildcard syntax is a little foreign to me. I have actually found that each section has invisible text used for creating a table of contents. Is there a way to use that to populate the navigation pane? Thanks for your help!
0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
When you say invisible text... do you mean field codes,  hidden text,  the mark up codes, or something else?
Sorry for the brevity  using phone.
0
 

Author Comment

by:indigo6
Comment Utility
No problem, I believe it is a field code. Thanks!
0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
The field code basically displays and formats text that has a "heading style". Same thing for navigation panel. Need to put headings in first.
0
 

Author Comment

by:indigo6
Comment Utility
Right, but I would like to populate the navigation pane using that data. Is that possible?
0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
Yes... once the headings are in the document (as Heading Styles) they should automatically appear in the navigation pane...  sorry not sure I understand where your question is coming from
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
Macro like this will help with applying headings:
Sub UpdateSections()

Dim para As Paragraph
Dim str As String

str = "(ARTICLE )[0-9]( )^=( )<[0-9A-z ]*[^13]"

ActiveDocument.Range.Select
    With Selection.Find
        .Text = str
        .Replacement.Text = ""
        .Forward = True
        .Font.Name = "Arial Narrow"
        .Font.Size = 24
        .MatchWildcards = True
        .Forward = True
        .Replacement.Style = "Heading 1"
        .Execute Replace:=wdReplaceAll
    End With

End Sub

Open in new window

0
 

Author Comment

by:indigo6
Comment Utility
No Problem, I was just asking if I could use the information in the field code to populate the Navigation Pane. So like adjust heading styles everywhere there is a field code. Sorry if I was being vague!
0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
You can do that via the styles pane, but only once the styles are applied.  Incidently you can also apply styles via the styles pane :-)
0
 

Author Comment

by:indigo6
Comment Utility
Ok, so how would I do that? Is there a way to select all the text that had field codes?
0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
Can be done using vba.  What field types are you targeting? Rclick and show field codes.
Sorry for the brevity - on phone
0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
Back at PC - this might help:
Sub FindFields()

Dim oFld As Field
Dim strHead As String

For Each oFld In ActiveDocument.Fields
If oFld.Type = wdFieldRef Then
' Apply Style based on other conditions?
strHead = InputBox("Enter a heading level for this text" & vbCr & vbCr & oFld.Code.Paragraphs(1).Range.Text)
If strHead = "0" Or strHead = "" Then
Else
oFld.Code.Paragraphs(1).Style = "Heading " & strHead
End If
End If
strHead = 0
Next oFld

End Sub

Open in new window

0
 

Author Comment

by:indigo6
Comment Utility
Here is an example of the field code. Thanks!
Field code
0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
Is the "2" the heading level that you wish to apply?  Is this field in the Table of Contents or elsewhere in the document?
0
 
LVL 14

Accepted Solution

by:
DrTribos earned 400 total points
Comment Utility
This should do the job:
Sub FindFields()

Dim oFld As Field
Dim strHead As String

For Each oFld In ActiveDocument.Fields
If oFld.Type = wdFieldTOCEntry Then
' Apply Style based on other conditions?
'strHead = InputBox("Enter a heading level for this text" & vbCr & vbCr & oFld.Code.Paragraphs(1).Range.Text)
'If strHead = "0" Or strHead = "" Then
'Else
oFld.Code.Paragraphs(1).Style = "Heading " & Mid(oFld.Code.Text, InStr(oFld.Code.Text, "\L ") + 4, Len(oFld.Code.Text) - InStr(oFld.Code.Text, "\L ") - 5)
'End If
End If
strHead = 0
Next oFld

End Sub

Open in new window

0
 
LVL 14

Expert Comment

by:DrTribos
Comment Utility
Oh... it will fail if the \L or number is missing
0
 

Author Closing Comment

by:indigo6
Comment Utility
This all looks good. My question changed a bit throughout, so a solution based on this should work. Thanks!
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Whether you've completed a degree in computer sciences or you're a self-taught programmer, writing your first lines of code in the real world is always a challenge. Here are some of the most common pitfalls for new programmers.
This video shows and describes the main difference between both orientations in Microsoft Word. Viewers will understand when to use each orientation and how to get the most out of them.
The viewer will learn how to make their project stand out over others by learning how to change colors and shapes, add spaces, change directions, and add bullets to their charts.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now