Word中VBA编程学习总结:
Word编辑过程,存在大量重复操作,借助VBA程序,简化操作,实现一键word文档格式化。但Word VBA中,Word对象、方法、属性过多,给编程带来不小的难题。另外word本身格式术语极其之多,很多文档格式非常混乱,相对excel VBA来说难度比较大。
为此,在word编辑过程中,总结出哪些重复操作,针对性的编辑一些通用程序,例如:全选表格,全选图片,文件夹内所有文件内容替换,不同节中设置页眉页脚,为所有图表添加题注等;但还有一部分操作,因需求不确定,程序化难度较大,例如:如何一键设置列表级别,非内嵌图片的处理等。
第一部分 文件夹中文件处理
1. 当前word文件位置,所有word文件转化为pdf
1.1 关键的一些语句
DIR 指令,遍历文件夹内所有word文档,配合Do while…Loop,即可操作所有文件。
    ExportAsFixedFormat 指令,转化为某一格式,设置exportformat:=wdExportFormatPDF即为pdf格式。
1.2 程序举例:
Sub DocToPdf()
'
    Dim myPath, myName, myName1 As String
    Dim SaveAsPDF As String
    Dim arr() As String
    Dim wdDoc As Document
   
    Application.ScreenUpdating = False
   
    myPath = ActiveDocument.Path & "\"
       
    myName = Dir(myPath & "*.doc*") '遍历文件夹内所有word文档
   
    myName1 = ActiveDocument.Name
   
    Do While myName <> ""
        Set wdDoc = Application.Documents.Open(myPath & myName, ReadOnly = True)
       
        '取得每个word文档对象,以下命令可根据实际情况调整,此处为另存pdf
        arr = Split(myName, ".")
        SaveAsPDF = myPath & arr(0) & ".pdf"
        wdDoc.ExportAsFixedFormat outputfilename:=SaveAsPDF, exportformat:=wdExportFormatPDF
       
        If myName <> myName1 Then wdDoc.Close
        myName = Dir
       
        Set wdDoc = Nothing
    Loop
    Application.ScreenUpdating = True
End Sub
第二部分 图表处理
1. 选中所有表格
1.1 关键的一些语句
For each t In Activedocument.Tables … Next  该语句可以遍历当前文档内所有表格,tables代表文档中的表格集合。
    DeleteAllEditableRanges和SelectAllEditableRanges 指令可以删除、选中待编辑区,加入待编辑区使用range.editors.add
vba自学好学吗1.2 全选表格程序
Sub 表格全选()
    Dim t As Table
    With ActiveDocument
        .DeleteAllEditableRanges wdEditorEveryone
        For Each t In .Tables
            t.Range.Editors.Add wdEditorEveryone
        Next
        .SelectAllEditableRanges wdEditorEveryone
        .DeleteAllEditableRanges wdEditorEveryone
    End With
End Sub
1.3 遍历所有表格,并使表格适应窗口
Sub 所有表格适应窗口()
    Dim t As Table
    For Each t In ActiveDocument.Tables
        t.AutoFitBehavior (wdAutoFitWindow)
    Next
End Sub
2. 如何选择表外文字(除表格外所有内容,包含内嵌图片、题注等)
2.1 关键一些语句:
    编程思路:选择表外文字方法有几个:
a. 遍历所有段落集合(word中为paragraphs),判断paragraph中是否含有表格
if Not t.Range.Information(12)  Then t.range.editors.add  -1
但该方法需要遍历所有段落,对于段落较多的文档不合适。
b. 读取文中所有表格的开始和结束位置,例如本程序中,将表格开始位置赋值给数组sArr(),将结束位置赋值给eArr(),
假设:sArr= s1, s2,s3…        eArr=e1,e2,e3…
        那么 set  rng =  Range(Start:=s1, End:=e1)
        Rng即为表格1的范围
        0至s1即为表格1前面的范围
        e1至s2即为表格1和2之间的范围
            将rng.Editors.add wdEditorEveryone 即可选中表外文本内容
2.2 代码如下
Sub 表外文字()
    Dim rng As Range
    Dim sArr(), eArr()
    Dim Cnt As Integer
   
    With ActiveDocument
        .DeleteAllEditableRanges wdEditorEveryone
        Cnt = .Tables.Count
        ReDim sArr(Cnt - 1)
        ReDim eArr(Cnt - 1)
       
        For i = 0 To Cnt - 1
            sArr(i) = .Tables.Item(i + 1).Range.Start
            eArr(i) = .Tables.Item(i + 1).Range.End
        Next
       
        If sArr(0) <> 0 Then  '表前文字
            Set rng = .Range(Start:=0, End:=sArr(0))
            rng.Editors.Add wdEditorEveryone
        End If
       
        For i = 0 To Cnt - 2 '表间文字
            Set rng = .Range(Start:=eArr(i), End:=sArr(i + 1))
            rng.Editors.Add wdEditorEveryone
        Next
       
        If eArr(Cnt - 1) <> .Range.End Then '表后文字
            Set rng = .Range(Start:=eArr(Cnt - 1), End:=.Range.End)
            rng.Editors.Add wdEditorEveryone
        End If
       
        .SelectAllEditableRanges wdEditorEveryone
        .DeleteAllEditableRanges wdEditorEveryone
    End With
   
End Sub
3. 选中所有图片
3.1 word知识补充
    Word中图片格式主要有两类:
1)内嵌式至行中,在word中对象为inlineshape;该类型图片在段后打换行符(enter),该图片占用一个段落(paragraph)。在有些时候,我们设置段落行距为固定磅数时,该类型图片仅显示一部分(这个问题曾困扰我好久,之前我都是设置为上下型来解决,没想到是行距造成的,,,,,)。
设置为单倍行距时:
设置为固定磅数,比如20磅时
    2)第二个类型为,非内嵌式。这种格式又分为环绕、四周、上下等等。在word中对象为shape。因为这种类型缺少段落的属性,不好用代码编辑,操作,所以我通常使用非内嵌的格式。内嵌的图片占用一个段落的范围,可以准确的知道图片范围的位置。
如:pic.Range.Paragraphs(1).Range.Editors.Add wdEditorEveryone
3.2 选中所有内嵌图片
Sub SelectAllPic()
    Dim pic As InlineShape
    With ActiveDocument
        .DeleteAllEditableRanges wdEditorEveryone
        For Each pic In .InlineShapes
            pic.Range.Paragraphs(1).Range.Editors.Add wdEditorEveryone
        Next
        .SelectAllEditableRanges wdEditorEveryone
        .DeleteAllEditableRanges wdEditorEveryone
    End With
End Sub
3.3 将shape类图片转换为inlineshape
Sub 图片格式化()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。