因為主標題和副標題一般都是包含一兩句子的段落,所以參數直接傳入Paragraph。至於判斷主副標題的規則則外面調用部分再做判斷。
Sub 設置主標題格式(ib As Paragraph) 'With ActiveDocument.Paragraphs(1).Range '.Style = ActiveDocument.Styles(wdStyleHeading1)'設置為標題1 '.ParagraphFormat.Alignment = wdAlignParagraphCenter '居中 '.ParagraphFormat.SpaceAfter = 0 '.ParagraphFormat.SpaceBefore = 0 '.ParagraphFormat.LineSpacingRule = wdLineSpaceAtLeast '.ParagraphFormat.LineSpacing = Word.Application.LinesToPoints(0) With ib .Format.Reset '有必要,如果原來段首縮進2字符的話,那么設置居中也會縮進2字符造成不是居中 .OutlineLevel = wdOutlineLevel1 '設置大綱1級 .Alignment = wdAlignParagraphCenter '設置行間距 'Word.Application.LinesToPoints(1) 是設置為段后1行的高度,不是標題下方空一行(后面采取空一行的方式) .SpaceAfter = 0 '12 ''設置段后一行的高度 .SpaceBefore = 0 '12 .LineSpacingRule = wdLineSpaceAtLeast '行間距設置為最小值 .LineSpacing = Word.Application.LinesToPoints(0) '最小值0。TODO:M$ word下會報錯 '設置字體 .Range.Font.ColorIndex = wdBlack .Range.Font.Bold = False .Range.Font.Name = "方正小標宋簡體" .Range.Font.Size = 22 End With End Sub
Sub 設置副標題格式(ib As Paragraph) With ib .Format.Reset .CharacterUnitFirstLineIndent = 0 .Alignment = wdAlignParagraphCenter .SpaceAfter = 0 .SpaceBefore = 0 .LineSpacingRule = wdLineSpaceExactly .LineSpacing = Word.Application.LinesToPoints(2.5) '1行的高度為12磅,2.5行就是30磅 '設置字體 .Range.Font.ColorIndex = wdBlack .Range.Font.Bold = False .Range.Font.Name = "楷體_GB2312" .Range.Font.Size = 16 End With End Sub
調用主標題和副標題設置,並且在標題下方增加一空行(注意,不是段后一行的高度,兩者不是一回事)。
'設置標題行。默認為第一段為標題,不考慮標題用換行符分行的情形(格式化好后手工分行即可) Call 設置主標題格式(ActiveDocument.Paragraphs(1)) '設置副標題:如果第二段不是空行,且不是以句號或者冒號(報告類公文)結尾,那么認為是副標題或單位名稱(發言材料等文體) If Len(ActiveDocument.Paragraphs(2).Range.Text) > 1 _ And ActiveDocument.Paragraphs(2).Range.Characters.Last.Previous <> "。" _ And ActiveDocument.Paragraphs(2).Range.Characters.Last.Previous <> ":" Then Call 設置副標題格式(ActiveDocument.Paragraphs(2)) '公文:如果標題的下一行多於1個字符(換行符算1個字符),那么就插入一空行,否則不用。 If Len(ActiveDocument.Paragraphs(2).Next.Range.Text) > 1 Then ActiveDocument.Paragraphs(2).Range.InsertParagraphAfter '在當前文檔的第一段之后插入一個新段落 End If ElseIf Len(ActiveDocument.Paragraphs(1).Next.Range.Text) > 1 Then ActiveDocument.Paragraphs(1).Range.InsertParagraphAfter '在當前文檔的第一段之后插入一個新段落 End If
主副標題判斷的邏輯見注釋。
需要注意的是,上述代碼對於只有兩個或以內段落的文檔而言,會報錯,因為標題下方插入空行需要判斷第三行,如果沒有第三行,自然會出錯。