Word-VBA【干货案例】

【1】

Sub 批量图片1增对比度和降亮度()
   Dim myShape As Shape, myIns As InlineShape
   For Each myIns In ActiveDocument.InlineShapes
       myIns.PictureFormat.IncrementBrightness -0.15  '降亮度
       myIns.PictureFormat.IncrementContrast 0.3      '增对比度
   Next
End Sub

【2】
Sub 批量图片2降对比度和增亮度()
   Dim myShape As Shape, myIns As InlineShape
   For Each myIns In ActiveDocument.InlineShapes
       myIns.PictureFormat.IncrementBrightness 0.15   '增亮度
       myIns.PictureFormat.IncrementContrast -0.3     '降对比度
   Next
End Sub

【3】

Sub 批量调整多个文档图片大小()

Dim fd As FileDialog, vrtSelectedItem As Variant, wd As Document, p As InlineShape, w, h

Application.ScreenUpdating = False

Set fd = Application.FileDialog(msoFileDialogFilePicker)

With fd

.AllowMultiSelect = True

.InitialFileName = ActiveDocument.Path

If .Show <> -1 Then

Application.ScreenUpdating = True

MsgBox '您没有选择任何文档!', vbOK, '退出'

Exit Sub

Else

w = InputBox('输入要设置的图片宽度(cm)', '输入宽度', 8)

h = InputBox('输入要设置的图片高度(cm)', '输入宽度', 8)

For Each vrtSelectedItem In .SelectedItems

Set wd = Documents.Open(vrtSelectedItem)

For Each p In wd.InlineShapes

p.LockAspectRatio = msoFalse '取消锁定纵橫比

p.Width = Round(w / 2.54 * 72 * 4, 0) / 4 '将磅单位转化成厘米

p.Height = Round(h / 2.54 * 72 * 4, 0) / 4

Next

wd.Close savechanges:=True

Set wd = Nothing

Next

End If

End With

Application.ScreenUpdating = True

MsgBox '图片设置完成!', , '运行完成   @萧260961242'

End Sub

【4】处理word内嵌Excel

说明:1、原始的Word文档放在名为“word”的子目录里
           2、包含本代码的宏文档放在“word”的上一层
           3、提取出来的Excel文档存到名为“excel”的子目录,和“word”并列
           4、因为内嵌的Excel文档比较多,加了一个条件判断,只把label包含有“问题”的Excel存下来,不需要的话可以去掉
           5、运行代码时Excel处于关闭状态,所有word文档(除了本宏文档)处于关闭状态

Sub Export_Embedded_Excel()
Dim wdDoc As Document   '用于打开子目录里word文档
Dim iCtr As Integer     '用于遍历word文档里Inlineshapes
Dim i As Long           '用于遍历文件夹里的word文档
Dim xlApp As Object     '用于打开内嵌object
Dim objName As String   '用于获得内嵌object的label
Dim city As String      '用于获得word文档的文件名并作为Excel文档命名的一部分
path = ThisDocument.path
On Error Resume Next
' 逐个打开word文件夹里的文档
With Application.FileSearch
    .NewSearch
    .LookIn = path & '\word'
    .SearchSubFolders = False
    .FileName = '*.doc'
    .FileType = msoFileTypeWordDocuments
    If .Execute() > 0 Then
        For i = 1 To .FoundFiles.Count
            Set wdDoc = Documents.Open(FileName:=.FoundFiles(i))
            city = Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 4)
            Set xlApp = CreateObject('Excel.Application')        '这行代码很关键
' 把文档里内嵌的、名字里包含“问题”的excel文件保存下来
            For iCtr = 1 To wdDoc.InlineShapes.Count
                If wdDoc.InlineShapes(iCtr).Type = wdInlineShapeEmbeddedOLEObject Then
                    If wdDoc.InlineShapes(iCtr).OLEFormat.ProgID = 'Excel.Sheet.8' Then
                        If wdDoc.InlineShapes(iCtr).OLEFormat.IconLabel Like '*问题*' Then
                        objName = wdDoc.InlineShapes(iCtr).OLEFormat.IconLabel
                        wdDoc.InlineShapes(iCtr).OLEFormat.Open
                        Set xlApp = GetObject(, 'Excel.Application')
                        xlApp.Workbooks(1).SaveAs FileName:=path & '\excel\' & city & objName & iCtr & '.xls'
                        xlApp.Workbooks(1).Close
                        End If
                    End If
                End If
            Next iCtr
            xlApp.Quit
            Set xlApp = Nothing
            wdDoc.Close False
' 下一个文档
        Next i
    End If
End With
End Sub

【5】删除图片文字-AlternativeText

Sub 删除可选文字()

Dim oShape As Shape

Dim oInlineShape As InlineShape

For Each oShape In ActiveDocument.Shapes

oShape.AlternativeText = '要删除“可选文字”则此处留空,也可以替换成自己需要的文字'

Next

For Each oInlineShape In ActiveDocument.InlineShapes

oInlineShape.AlternativeText = '要删除“可选文字”则此处留空,也可以替换成自己需要的文字'

Next

MsgBox '处理完毕!'

End Sub

【6】排版

Sub 格式设置()

Application.ScreenUpdating = False

'更改所有硬回车为软回车

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text = '^l'

.Replacement.Text = '^p'

.Forward = True

.Wrap = wdFindContinue

.Format = False

.MatchCase = False

.MatchWholeWord = False

.MatchByte = True

.MatchWildcards = False

.MatchSoundsLike = False

.MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

'去除所有空行

Dim i As Paragraph, n As Integer

Application.ScreenUpdating = False

For Each i In ActiveDocument.Paragraphs

If Len(i.Range) = 1 Then

i.Range.Delete

n = n + 1

End If

Next

Application.ScreenUpdating = True

'去除半角空格

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text = ' '

.Replacement.Text = ''

.Forward = True

.Wrap = wdFindContinue

.Format = False

.MatchCase = False

.MatchWholeWord = False

.MatchByte = True

.MatchWildcards = False

.MatchSoundsLike = False

.MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

'去除全角空格

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text = ' '

.Replacement.Text = ''

.Forward = True

.Wrap = wdFindContinue

.Format = False

.MatchCase = False

.MatchWholeWord = False

.MatchByte = True

.MatchWildcards = False

.MatchSoundsLike = False

.MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

'替换非标准引号为标准引号

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text = '''(*)'''

.Replacement.Text = ChrW(8220) & '\1' & ChrW(8221)

.Forward = True

.Wrap = wdFindContinue

.Format = False

.MatchCase = False

.MatchWholeWord = False

.MatchByte = False

.MatchAllWordForms = False

.MatchSoundsLike = False

.MatchWildcards = True

End With

Selection.Find.Execute Replace:=wdReplaceAll

'字母数字符号全角转半角 Macro

Dim qjsz, bjsz As String, iii As Integer '定义qjsz(全角数字)、bjsz(半角数字)为字符串型,iii为整数型

qjsz = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,./<>?;’:[]{}\|=-+_)(*%$#@!`~&'

bjsz = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,。/《》?;':【】{}\|=-+_)(×%$#@!'~&'

Selection.WholeStory

For iii = 1 To 95 '循环10次

With Selection.Find

.Text = Mid(qjsz, iii, 1) 'mid函数:返回文本字符串中从指定位置开始的特定数目的字符,每次取一个数字

.Replacement.Text = Mid(bjsz, iii, 1) '将用于替换的相应位置的半角数字

.Format = False '保留替换前的字符格式

.MatchWildcards = False

.Execute Replace:=wdReplaceAll '用半角符号替换全角符号

End With

Next iii

'修改小数点错误

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text = '([0-9])。([0-9])'

.Replacement.Text = '\1.\2'

.Forward = True

.Wrap = wdFindContinue

.Format = False

.MatchCase = False

.MatchWholeWord = False

.MatchByte = False

.MatchAllWordForms = False

.MatchSoundsLike = False

.MatchWildcards = True

End With

Selection.Find.Execute Replace:=wdReplaceAll

'设置字号

Selection.WholeStory  '全选

Selection.ClearFormatting  '清除全文格式

Selection.Font.Size = 14  '设置字号为14号

'设置行距

Selection.ParagraphFormat.LineSpacingRule = wdLineSpaceExactly

Selection.ParagraphFormat.LineSpacing = 25

Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify  '设置文本为两端对齐

Selection.ParagraphFormat.CharacterUnitFirstLineIndent = 2  '设置段首缩进2字符

Selection.HomeKey Unit:=wdStory  '移至文首

Selection.EndKey Unit:=wdLine, Extend:=wdExtend  '选中首行

Selection.ClearFormatting  '清除首行格式

Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter  '设置首行居中对齐

Selection.ParagraphFormat.LineUnitBefore = 1  '设置首行段前间距1行

Selection.ParagraphFormat.LineUnitAfter = 1  '设置首行段后间距1行

Selection.Font.Name = '微软雅黑'  '设置首行字体为“微软雅黑”

Selection.Font.Size = 18  '设置首行字号为18号

Selection.Font.Bold = wdToggle  '设置首行字形为加粗

Application.ScreenUpdating = True

End Sub

【6】文档合并

Sub 批量合并()

On Error Resume Next

Dim fd As FileDialog, i&, doc As Document, p$, t&, j&, s As Section, k&, n&, m&, c&

Set fd = Application.FileDialog(msoFileDialogFolderPicker)

If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub

Set fd = Nothing

If MsgBox('是否合并文件夹 ' & p & ' ?', 4 + 48) = vbNo Then End

If MsgBox('<是>:Word 文档(*.doc)    <否>:文本文档(*.txt)', 4 + 48) = vbYes Then t = 0 Else t = 1

If MsgBox('请选择分隔符!——<是>:分节符    <否>:分页符', 4 + 48) = vbYes Then j = 1 Else j = 0

If j = 1 Then

If MsgBox('每节页码!——<是>:重排    <否>:顺延', 4 + 48) = vbYes Then k = 1 Else k = 2

Else

k = 2

End If

Documents.Add

With Application.FileSearch

.NewSearch

.LookIn = p

.SearchSubFolders = True

If t = 0 Then .FileName = '*.doc' Else .FileName = '*.txt'

If .Execute > 0 Then

For i = 1 To .FoundFiles.Count

If t = 0 Then

Set doc = Documents.Open(FileName:=.FoundFiles(i), Visible:=False)

Else

Set doc = Documents.Open(FileName:=.FoundFiles(i), Encoding:=936, Visible:=False)

End If

doc.Content.Copy

doc.Close

Selection.EndKey 6

Selection.Paste

ActiveDocument.Characters(1).Copy

If j = 1 Then

Selection.InsertBreak Type:=wdSectionBreakNextPage

Else

Selection.InsertBreak Type:=wdPageBreak

End If

Next i

MsgBox '合并完毕!共合并 ' & .FoundFiles.Count & ' 个文件!', 0 + 64

Else

MsgBox '未发现文件!', 0 + 16

End If

End With

With ActiveDocument

.Characters.Last.Previous.Delete

.Characters.Last.Previous.Delete

'重排页码

For Each s In .Sections

s.Range.Select

With Selection.Sections(1).Headers(1).PageNumbers

.NumberStyle = wdPageNumberStyleNumberInDash

If k = 1 Then .RestartNumberingAtSection = True Else .RestartNumberingAtSection = False

.StartingNumber = 1

End With

Selection.Sections(1).Footers(1).PageNumbers.Add PageNumberAlignment:=wdAlignPageNumberCenter, FirstPage:=True

ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter

Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter.LinkToPrevious

ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

Next

Selection.HomeKey 6

'奇数加页

Do

For Each s In .Sections

n = s.Range.Information(3)

n = n - m

m = m + n

If n Mod 2 = 1 Then

s.Range.Characters.Last.InsertBreak Type:=wdPageBreak

n = 0

m = 0

c = 1

Exit For

Else

c = 0

End If

Next

Loop Until c = 0

End With

End Sub

(0)

相关推荐