首页 > 解决方案 > 格式化整个文档每章第一段中的前四个单词

问题描述

我在 MS Word 中格式化我的手稿以供出版。我想格式化每章的第一段。

以下要求我转到每个第一段并选择我想变成“小型大写字母”的单词

With Selection.Find
    .Text = "[a-z]{1,}"
    .MatchWildcards = True
    .MatchCase = True
    .Replacement.Font.Size = 9.5
    .Execute Replace:=wdReplaceAll, Forward:=True, _
      Wrap:=wdFindStop
End With
Selection.Range.Case = wdUpperCase
With Selection.ParagraphFormat
    .LeftIndent = InchesToPoints(0)
    .RightIndent = InchesToPoints(0)
    .SpaceBefore = 0
    .SpaceBeforeAuto = False
    .SpaceAfter = 0
    .SpaceAfterAuto = False
    .LineSpacingRule = wdLineSpaceMultiple
    .LineSpacing = LinesToPoints(1)
    .Alignment = wdAlignParagraphJustify
    .WidowControl = True
    .KeepWithNext = False
    .KeepTogether = False
    .PageBreakBefore = False
    .NoLineNumber = False
    .Hyphenation = True
    .FirstLineIndent = InchesToPoints(0)
    .OutlineLevel = wdOutlineLevelBodyText
    .CharacterUnitLeftIndent = 0
    .CharacterUnitRightIndent = 0
    .CharacterUnitFirstLineIndent = 0
    .LineUnitBefore = 0
    .LineUnitAfter = 0
    .MirrorIndents = False
    .TextboxTightWrap = wdTightNone
    .CollapsedByDefault = False
End With

我正在寻找一个版本,它会自动选择整个文档每章第一段中的前四个单词。

第一段具有与单词“正常”样式不同的样式。

有一个分页符和一个使用标题 1 的章节标题。

标签: vbams-word

解决方案


假设每章都以 Heading 1 样式的标题开头...并假设我正确理解下一段(本章中的第一段)您希望前四个单词是小型大写字母...应该这样做:

Sub HeadingOneRange()
    Dim doc As Word.Document, i As Long
    Dim rng As Word.Range, iRng As Range
    
    Set doc = ActiveDocument
    Set rng = doc.Content
    Application.ScreenUpdating = False
    On Error GoTo errHandler
    
    With rng.Find
        .ClearFormatting
        .Format = True
        .Forward = True
        .Style = doc.Styles("Heading 1").NameLocal
        .Text = ""
        .Wrap = wdFindStop
        While .Execute
            rng.Select
            Set iRng = rng.Bookmarks("\HeadingLevel").Range.Paragraphs(2).Range
            With iRng
                .Collapse Word.WdCollapseDirection.wdCollapseStart
                .MoveEnd Word.WdUnits.wdWord, Count:=4
                For i = 1 To .Characters.Count
                    If .Characters(i).Case = wdLowerCase Then
                        .Characters(i).Font.Size = 9.5
                        .Characters(i).Case = wdUpperCase
                    End If
                Next
            End With
            rng.Collapse Word.WdCollapseDirection.wdCollapseEnd
        Wend
    End With
    Selection.HomeKey wdStory
errHandler:
    If Err.Number <> 0 Then
        MsgBox Err.Number & vbCr & Err.Description, vbCritical
        Err.Clear
    End If
    Application.ScreenUpdating = True
    MsgBox "Action Complete"
End Sub

推荐阅读