#1
|
|||
|
|||
Word Macro Shuts Down exactly half way through Document
My first challenge was to automate underlining headers in a word doc. This code worked:
Code:
Sub Underline_Header() Dim numOfParagraphs As Integer numOfParagraphs = ActiveDocument.BuiltInDocumentProperties("NUMBER OF PARAGRAPHS") Selection.HomeKey Unit:=wdStory For x1 = 1 To numOfParagraphs Selection.Paragraphs(1).Range.Select char_count = Len(Selection.Paragraphs(1).Range) If char_count < 50 Then Selection.Font.Underline = True End If Selection.MoveDown Unit:=wdParagraph, Count:=1 Next x1 End Sub I have tried altering the code at Unit:=wdStory to Unit:=wdDocument but that was not the solution. I also tried adding Selection.EndKey Unit:=wdStory to the code but I get the same result. |
#2
|
||||
|
||||
You should be using styles rather than local formatting. Try this code
Code:
Sub Underline_Headings() Dim aPar As Paragraph For Each aPar In ActiveDocument.Paragraphs If Len(aPar.Range.Text) < 50 Then aPar.Range.Style = "Heading 1" End If Next aPar ActiveDocument.Styles("Heading 1").Font.Underline = wdUnderlineSingle End Sub
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
#3
|
|||
|
|||
While I agree with Andrew, I would like to ask you a couple of questions about your code and offer some tips for looping through paragraphs when you need to.
Why did you declare numOfParagrpahs but not x1 or char_count? Why did you use char_count in the first place? Isn't If Len(Selection.Paragraphs(1).Range) < 50 the same as: char_count = Len(Selection.Paragraphs(1).Range) If char_count < 50 Then In most case you don't really have to select things to do things with those things you selected. In addition to Andrews For ... Each method, here are two alternate ways to loop through paragraphs. Code:
Sub LoopThroughParagraphsI() Dim lngIndex As Long For lngIndex = 1 To ActiveDocument.Range.Paragraphs.Count If Len(ActiveDocument.Range.Paragraphs(lngIndex).Range) < 50 Then ActiveDocument.Range.Paragraphs(lngIndex).Range.Font.Underline = wdUnderlineSingle End If Next lbl_Exit: Exit Sub End Sub Sub LoopThroughParagraphsII() 'Typically faster. Dim oPar As Paragraph Set oPar = ActiveDocument.Range.Paragraphs(1) Do If Len(oPar.Range.Text) < 50 Then oPar.Range.Font.Underline = wdUnderlineNone Set oPar = oPar.Next Loop Until oPar Is Nothing lbl_Exit: Exit Sub End Sub |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Word cutting off half the text | stacereally | Word | 3 | 01-10-2024 08:36 AM |
Word shuts down when trying to open certain docs | lesliejames | Word | 0 | 01-19-2015 11:36 AM |
How do I see one document map for each half of a split MS WORD 2010 document? | quickwin | Word | 3 | 07-09-2013 10:20 PM |
Scrolling wheel in Excel shuts down my computer... | lazlow | Excel | 1 | 11-01-2011 10:59 AM |
Outlook 2007 Shuts Down in Windows 7 | TOActor | Outlook | 0 | 03-06-2010 02:39 AM |