您是否对在 Word 文档中同时处理多种不同的格式样式感到厌烦?那么就来了解一下如何创建三个宏以帮助您管理 Word 文档样式。
我既是作者也是编辑,每个月同事都会发给我几篇具有特殊格式样式的 Microsoft Word 文档,而且似乎每篇文档都有不同的格式样式。“样式”是一种格式类型,用于 Word 文档中的特定内容部分。例如,同事一周内发给我 18 篇需要以某种方式进行样式处理的 Word 文档。这项工作很适合由宏来完成!
本专栏中,我将向您介绍如何创建三个宏以帮助您管理 Word 文档样式。
列出文档样式
要处理文档样式,先要了解文档中存在哪些样式。Word 2002 中的“样式和格式”任务窗格很有用,它列出了一些可用的样式,但有时在单独的文档中列出打开文档的所有样式会更方便。在下面第一个示例中,我将介绍如何创建并运行宏,以列出打开的 Word 文档中所有可用的样式:
启动 Microsoft Word 2002 并打开要列出其样式的文档。
在“工具”菜单上,指向“宏”,然后单击“宏”。
在“宏的位置”下拉框中,单击“Normal.dot(共用模板)”。
在“宏名”框中,键入“ListStyles”,然后单击“创建”。将显示 Microsoft Visual Basic? 编辑器。
找到以下代码:
Sub ListStyles()
'
' ListStyles Macro
' 宏在 {日期} 由 {姓名} 创建
'
End Sub
如下所示编辑该代码:
Sub ListStyles()
'
' ListStyles Macro
' 宏在 {日期} 由 {姓名} 创建
'
' 用途:将活动文档中的所有样式
' 打印到新 Word 文档中。
Dim strTitle As String
Dim astrStyles() As String
Dim objStyle As Style
Dim objDocument As Word.Document
Dim intCount As Integer
' 获取活动 Word 文档的标题。
strTitle = _
ActiveDocument.BuiltInDocumentProperties(wdPropertyTitle)
intCount = 1
' 将活动文档中的所有样式存储到内存中,
' 无论样式是否在使用。
For Each objStyle In ActiveDocument.Styles
ReDim Preserve astrStyles(intCount)
If objStyle.InUse Then
astrStyles(intCount) = objStyle & " (使用的样式)"
Else
astrStyles(intCount) = objStyle & " (未使用的样式)"
End If
intCount = intCount + 1
Next objStyle
' 创建新的 Word 文档报告结果。
Set objDocument = Word.Documents.Add
With objDocument.Range
' 报告结果。
.InsertAfter "Styles in " & strTitle & ":"
.InsertParagraphAfter
.Collapse Direction:=wdCollapseEnd
For intCount = 1 To UBound(astrStyles)
.InsertAfter astrStyles(intCount)
.InsertParagraphAfter
.Collapse Direction:=wdCollapseEnd
Next intCount
End With
MsgBox Prompt:="完成!"
End Sub
在“文件”菜单上,单击“保存 Normal”。
在“文件”菜单上,单击“关闭并返回到 Microsoft Word”。
确保文档仍然处于打开状态。如果已关闭,请重新打开文档。
在“工具”菜单上,指向“宏”,然后单击“宏”。
在宏列表中单击“ListStyles”,然后单击“运行”。将创建一个新的 Word 文档,列出该文档中的所有可用样式。
注意:如果在尝试运行宏时,系统显示消息说该项目中的宏被禁用,请参阅文章更改宏安全性设置,以获取如何解决这一问题的详细信息。
更改文档样式
我们已经知道了有哪些文档样式可用,现在可以将其中一些样式更改为其他文档样式。在下一个示例中,我将介绍如何创建并运行宏,以更改打开的 Word 文档中的多个文档样式。
启动 Microsoft Word 2002 并打开要在其中更改样式的文档。
启动 Microsoft Excel 2002 并创建一个新的 Excel 工作簿。
在单元格 A1 中,键入要在打开的 Word 文档中更改的样式的名称。然后在单元格 B1 中,键入要更改成的新样式的名称。对每个要更改的样式重复此操作:在 A 列中键入现有样式名称,在 B 列中键入新样式名称。以下是一个示例:
完成后,保存并关闭 Excel 工作簿。
返回到 Word。在“工具”菜单上,指向“宏”,然后单击“宏”。
在“宏的位置”列表中,单击“Normal.dot (共用模板)”。
在“宏名”列表中,键入“ChangeDocumentStyles”,然后单击“创建”。将显示 Visual Basic 编辑器。
找到以下代码:
Sub ChangeDocumentStyles()
'
' 更改文档形式的宏
' 宏在 {日期} 由 {姓名} 创建
'
End Sub
如下所示编辑该代码:
Sub ChangeDocumentStyles()
'
' 更改文档形式的宏
' 宏在 {日期} 由 {姓名} 创建
'
' 用途:根据在 Microsoft Excel 中创建的样式更改文件
' 提供的数据更改所有文档样式。
Dim objFileDlg As Office.FileDialog
Dim xlApp As Excel.Application
Dim objWB As Excel.Workbook
Dim objWS As Excel.Worksheet
Dim objRngOld As Excel.Range
Dim objRngNew As Excel.Range
On Error GoTo ChangeDocumentStyles_Err
' 用户指示宏 Excel 样式更改文件所在的位置。
Set objFileDlg = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
With objFileDlg
.AllowMultiSelect = False
.Title = "选择样式更改文件"
.Filters.Clear
.Filters.Add _
Description:="样式更改文件 (*.xls)", Extensions:="*.xls"
' “-1”表明用户在文件对话框中单击了“打开”按钮。
If .Show = -1 Then
' 在 Excel 工作簿中打开第一个工作表,并从单元格 A1 开始。
Set xlApp = New Excel.Application
Set objWB = xlApp.Workbooks.Open(FileName:=objFileDlg.SelectedItems(1))
Set objWS = objWB.Worksheets.Item(1)
Set objRngOld = objWS.Range(Cell1:="A1")
' 如果单元格为空,则任务已完成。
Do While Not objRngOld.Value = ""
' 使用活动的 Word 文档。
With ActiveDocument.Content.Find
' 在 A 列中查找样式。
.Style = ActiveDocument.Styles(objRngOld.Value)
' 替换为 B 列中的样式。
Set objRngNew = objRngOld.Offset(ColumnOffset:=1)
.Replacement.Style = ActiveDocument.Styles(objRngNew.Value)
.Execute Replace:=wdReplaceAll
' 转到 A 列下一行。
Set objRngOld = objRngNew.Offset(RowOffset:=1, ColumnOffset:=-1)
End With
Loop
End If
End With
ChangeDocumentStyles_Exit:
' 任务已完成。
MsgBox Prompt:="完成!"
Exit Sub
' 如果出现错误,则转到这里。
ChangeDocumentStyles_Err:
Select Case Err.Number
Case 5941 ' 未知样式。
MsgBox Prompt:="找不到要替换的一个或多个样式。" & _
"检查样式更改工作表 B 列中的样式。" & _
"程序执行停止。"
Case 62
Resume Next
Case Else ' 未知错误。
MsgBox Prompt:="错误 " & Err.Number & _
"在 ChangeDocumentStyles 宏中:" & Err.Description
End Select
GoTo ChangeDocumentStyles_Exit
End Sub
在“工具”菜单上,单击“引用”。将显示“引用 - Normal”对话框。
在“可使用的引用”列表中,选中“Microsoft Excel 10.0 Object Library”,然后单击“确定”。
在“文件”菜单上,单击“保存 Normal”。
在“文件”菜单上,单击“关闭并返回到 Microsoft Word”。
确保 Word 文档仍处于打开状态。如果已关闭,请重新打开文档。
在 Word 的“工具”菜单中,指向“宏”,然后单击“宏”。将显示“宏”对话框。
在宏列表中单击“ChangeDocumentStyles”,然后单击“运行”。将显示“选择样式更改文件”对话框。
单击在上述步骤 2 中创建的文件,然后单击“打开”。
删除未使用的自定义样式
除了内置 Word 文档样式(例如标题 1 和正文)外,用户还可以创建自定义文档样式。但是,如果用户创建自定义样式后却忘记在文档中使用,则反而成为累赘!未使用的自定义文档样式只能徒增最终文档的大小。在最后一个示例中,我将介绍如何创建并运行宏,以删除打开的 Word 文档中的所有未使用的自定义样式。
注意:不能删除内置文档样式。
启动 Microsoft Word 2002 并打开要列出其样式的文档。
在“工具”菜单上,指向“宏”,然后单击“宏”。
在“宏的位置”列表中,单击“Normal.dot (共用模板)”。
在“宏名”列表中,键入“DeleteUnusedCustomStyles”,然后单击“创建”。将显示 Visual Basic 编辑器。
找到以下代码:
Sub DeleteUnusedCustomStyles()
'
' ChangeDocumentStyles Macro
' 宏在 {日期} 由 {姓名} 创建
'
End Sub
如下所示编辑该代码:
Sub DeleteUnusedCustomStyles()
'
' ChangeDocumentStyles Macro
' 宏在 {日期} 由 {姓名} 创建
'
' 用途:删除活动 Word 文档中
' 所有未使用的自定义样式。不能删除
' 内置样式。
Dim objStyle As Word.Style
For Each objStyle In ActiveDocument.Styles
' 如果自定义样式未在使用,则将其删除。
If objStyle.BuiltIn = False And _
objStyle.InUse = False Then
objStyle.Delete
End If
intCount = intCount + 1
Next objStyle
MsgBox "活动文档中未使用的自定义样式被删除。"
End Sub
在“文件”菜单上,单击“保存 Normal”。
在“文件”菜单上,单击“关闭并返回到 Microsoft Word”。
确保文档仍然处于打开状态。如果已关闭,请重新打开文档。
在“工具”菜单上,指向“宏”,然后单击“宏”。
在宏列表中单击“DeleteUnusedCustomStyles”,然后单击“运行”。活动 Word 文档中所有未使用的自定义样式均被删除。