nighTuner & Yuyu's Space

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  0 随笔 :: 35 文章 :: 0 评论 :: 0 Trackbacks

您是否对在 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 文档中所有未使用的自定义样式均被删除。

posted on 2005-04-14 02:02 nighTuner 阅读(784) 评论(0)  编辑  收藏 所属分类: Microsoft Windows

只有注册用户登录后才能发表评论。


网站导航: