我有一个函数,可以为书中的标题设置样式。我正在尝试将不同的样式应用于文档的其他部分,但不能完全正常工作。
所以有3种样式:
我确定我使用通配符向其他数组声明-但逻辑上有困难,并且在通配符= true时遇到了问题。
如果任何人也碰巧都掌握如何设置自己的样式的资源,则将它们声明给每个部分(有关我想做什么的想法,请参见代码中的替换样式-“标题1,章节标题” -我可以在宏中定义它吗?),我真的很感激!
有关Chapter功能,请参见下面的代码。
Private Function iiiChapterHeadings()
Dim Chapters As Variant, Chapter
Chapters = Array("Chapter One", "Chapter Two", "Chapter Three")
For Each Chapter In Chapters
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles( _
"Heading 1,Chapter Heading")
With Selection.Find
.Text = Chapter
.Replacement.Text = "^m" & Chapter & "^p^p"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next
End Function
文件示例!!!
Chapter One^p
^p
This first line of text will have a style set to it so there's no indentation, the first letter of the sentence is a capital letter and it applies to everything up to the next line break.^p
Everything after the line break above has a different style set to it.^p
All of this will have that style up until the next page break.^p
As will this line.^p
And this etc. ^p
^m
Chapter Two^p
^p
答案 0 :(得分:0)
您不需要通配符。带有循环的普通查找将可以。例如:
Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument
With .Range
.Style = wdStyleNormal
.InsertBefore vbCr
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "^pChapter"
.Replacement.Text = ""
.Forward = True
.Format = False
.Wrap = wdFindStop
.Execute
End With
Do While .Find.Found
.Start = .Start + 1
.Paragraphs.First.Style = wdStyleHeading1
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
With .Range
With .Find
.Text = ""
.Style = wdStyleHeading1
.Execute
End With
Do While .Find.Found
.Paragraphs.First.Next.Style = wdStyleHeading2
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
.Range.Characters.First.Text = vbNullString
End With
Application.ScreenUpdating = True
End Sub
以上代码假定文本的大部分内容为“常规”样式,而您的章节标题将采用“标题1”样式,其后的段落将采用“标题2”样式。由于您除了说“标题1”外没有说要使用什么样式,因此我只选择了两个内置样式。
答案 1 :(得分:0)
如果我正确理解您的文档,则包含许多章节,并以手动分页符分隔。本章的标题由“章”和另一个词组成,后跟一个空白的段落。
在您的问题中,您指的是“换行符(^ p)”。注意不要将行与段落混淆,因为它们是不同的。 ^ p实际上是一个段落标记,并使用Enter
键输入。在Word中也有使用Shift+Enter
输入的手动换行符,可以使用^ l找到。
如果分页符的唯一目的是确保章节标题位于新页面上,则没有必要。通过设置“之前的分页符”,可以将您的章节标题样式定义为具有隐式的分页符。
该章标题后面的空白段落也是不必要的。那种间隔方法的需要被打字机淘汰了。而是为您的章节标题样式设置“之后间距”,以提供适当的空间。
Word的内置样式(“普通”除外)均具有描述其预期用途的名称。文档正文中最适合文本的样式是正文。
由于Word的内置样式名称发生更改以反映应用程序语言,因此在引用它们时最好使用WdBuiltinStyle枚举器。大多数样式都有其价值,尽管缺少最新添加的样式。
下面的代码完成了上述所有操作,并使用通配符搜索来避免在文档中添加任何多余的内容。
Sub FormatDocument()
With ActiveDocument.Range
'set base style for document
.Style = wdStyleBodyText
RemovePageBreaks
ModifyHeading1
' Find chapter headings and apply Heading 1
With .Find
.ClearFormatting
.Text = "Chapter <*>"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute
End With
Do While .Find.Found
With .Paragraphs.First
.Style = wdStyleHeading1
.Next.Style = wdStyleHeading2
End With
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
End Sub
Private Sub RemovePageBreaks()
With ActiveDocument.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "^m"
.Replacement.Text = ""
.Execute Replace:=wdReplaceAll
'removing the page break leaves an empty para so remove all empty paragraphs
'this will also remove the unnecessary empty paragraph after the chapter heading
.ClearFormatting
.Replacement.ClearFormatting
.Text = "^p^p"
.Replacement.Text = "^p"
.Execute Replace:=wdReplaceAll
End With
End Sub
Private Sub ModifyHeading1()
With ActiveDocument.Styles(wdStyleHeading1).ParagraphFormat
'add implicit page break
.PageBreakBefore = True
'add space after in points
.SpaceAfter = 12
End With
End Sub
如果您想了解有关Word中样式的更多信息,请访问Shauna Kelly's website
尽管其中包含的许多文章都比较陈旧,但您可能还会发现Word MVP's的站点很有用。它还包含指向各个MVP网站的链接。