![]() |
|
|
|
#1
|
|||
|
|||
|
I'm stumbling through writing a macro that looks at each paragraph, determines if it's got a particular (list-type) style applied, then applies a related ("Body Text: Pre-list") style to the paragraph preceding any with a list-type style, provided that preceding paragraph is of a certain style ("Body Text").
I need to look for about six or seven different styles, plus some with manually applied bullets/numbers. What's the most efficient way to write an If statement that's got a ton of options, all of which, if met, will be addressed with the same subsequent action? I looked at Select Case, but that seems to be for when you're looking for multiple criteria but where each one has a different action taken. I'm pasting the code I've started on here. For now, it's only got two styles to look for. Here's the crux of it: after I add all of the different options to the If statement, it's going to be really long. My Google tutor hasn't been terribly helpful... Code:
Sub Format_BodyTextPreList3()
Dim lngParaNum As Long
' The loop has to start with the *second* paragraph because if the first
' one is "List: Bullet" style, when the macro tries to shift up to the
' prior paragraph -- that is, paragraph 0 -- an error is thrown. This is
' all in case a user runs the macro on a document that just so happens to
' start with "List: Bullet" style.
For lngParaNum = 2 To ActiveDocument.Paragraphs.Count
If (ActiveDocument.Paragraphs(lngParaNum).Style = "List: Bullet" Or ActiveDocument.Paragraphs(lngParaNum).Style = "List: Numbered") Then
Debug.Print ActiveDocument.Paragraphs(lngParaNum).Style
lngParaNum = lngParaNum - 1
If ActiveDocument.Paragraphs(lngParaNum).Style = "Body Text" Then
Debug.Print ActiveDocument.Paragraphs(lngParaNum).Style
ActiveDocument.Paragraphs(lngParaNum).Style = "Body Text: Pre-list"
Else
lngParaNum = lngParaNum + 2
End If
End If
Next lngParaNum
End Sub
|
|
#2
|
||||
|
||||
|
Looping through all paragraphs in a long document and testing all possible combinations is liable to be quite slow. What I'd be inclined to use is a Find/Replace that looks for the primary Styles of interest, then check what precedes them, thus:
Code:
Sub Demo()
Application.ScreenUpdating = False
Dim ArrFnd, ArrPre, ArrRep, i As Long
ArrFnd = Array("List: Bullet", "List: Numbered")
ArrPre = Array("Body Text", "Body Text")
ArrRep = Array("Body Text: Pre-list", "Body Text: Pre-list")
For i = 0 To UBound(ArrFnd)
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = True
.Style = ArrFnd(i)
.Execute
End With
Do While .Find.Found
If .Information(wdWithInTable) = True Then
.End = .Tables(1).Range.End
Else
With .Paragraphs.First.Previous.Range.Paragraphs.First
If .Style = ArrPre(i) Then .Style = ArrRep(i)
End With
End If
If .End = ActiveDocument.Range.End Then Exit Do
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Next
Application.ScreenUpdating = True
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#3
|
|||
|
|||
|
That did it -- thanks again for all your help, Paul!
|
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Help on using scenarios in Excel | tjthomps23 | Excel | 0 | 01-20-2017 10:09 AM |
| How can I generate Scenarios? | tommade | Excel Programming | 0 | 02-18-2016 04:56 PM |
| Lookup multiple values and compare different scenarios to get a specific result | mws | Excel | 5 | 05-24-2014 04:52 AM |
Creating a multiple choice test
|
McDoug | Office | 2 | 10-19-2012 10:02 AM |
How to make a multiple-choice test?
|
micahfaulkner75 | Mail Merge | 1 | 09-12-2012 06:08 PM |