利用宏批量调整word中图和表格格式

利用宏批量调整word中图和表格格式

批量调整图片

设置固定大小n厘米:

Sub resetImgSize()
Dim iShape As InlineShape
For Each iShape In ActiveDocument.InlineShapes
iShape.LockAspectRatio = msoTrue
iShape.Height = CentimetersToPoints(n)
iShape.Width = CentimetersToPoints(n)
Next
End Sub

等比例缩放n倍:

Sub resetImgSize()

Dim imgHeight

Dim imgWidth
Dim iShape As InlineShape
For Each iShape In ActiveDocument.InlineShapes
iShape.LockAspectRatio = msoTrue

imgHeight = iShape.Height

imgWidth = iShape.Width
iShape.Height = CentimetersToPoints(n * imgHeight )
iShape.Width = CentimetersToPoints(n * imgWidth)

Next
End Sub


最大宽度n厘米等比例缩放:

Sub resetImgSize()
Dim imgHeight
Dim imgWidth
Dim iShape As InlineShape
For Each iShape In ActiveDocument.InlineShapes
iShape.LockAspectRatio = msoTrue
imgHeight = iShape.Height
imgWidth = iShape.Width
 iShape.Height = CentimetersToPoints(n * imgHeight / imgWidth)
iShape.Width = CentimetersToPoints(n)
Next
End Sub

图题注设置

     Sub adjustImage()
      On Error Resume Next
  '该代码可以批量调整技术报告的表格格式,每行有注释,可以情况进行自定义调整
  For i = 1 To ActiveDocument.InlineShapes.Count
  If ActiveDocument.InlineShapes(i).Type = 3 Then
  ActiveDocument.InlineShapes(i).Range.Style = "图表居中"
  ActiveDocument.InlineShapes(i).Range.Next(wdParagraph, 1).Select
  Selection.Style = ActiveDocument.Styles("图")
   End If
  Next i
  End Sub

通过宏在word中实现“图1-1”

Sub InsertCaption() '修改系统插入“题注”命令


'功能:自动删除标签与编号间的空格(英文除外),并在题注数字后添加一个空格;适用于:Word 2003 - 2013,不兼容WPS文字!
'真正从原理上协同系统插入题注,无任何前提条件;用户照常插入题注即可,甚至感觉不到程序的存在!
'Endlesswx于2015年8月4日

'另,如果插入的始终未域代码而不是数字,非程序问题,Alt+F9一次即可

Dim Lab As String, startPt As Long, endPt As Long, myrang As Range
'On Error Resume Next '发生错误时让程序继续执行下一句代码
' Application.ScreenUpdating = False '关闭屏幕更新,2013在此处关闭更新会导致输入框灰色不可选,故修正在调出对话框之后

startPt = Selection.Start 'startPt标注起始点

'***将if条件隐藏隐藏即可实现----手动替换题注空格***
If Application.Dialogs(357).Show = -1 Then '插入“题注”对话框秀出来,如果按确定结束时执行以下程序,避免按取消后的空格,357也可换成wdDialogInsertCaption

Application.ScreenUpdating = False '关闭屏幕更新

Lab = Dialogs(357).label
endPt = Selection.Start 'endPt标记插入的题注部分终点
Selection.Start = startPt '选定插入的整个题注

'删除标签与编号间的空格(英文后的保留)
With Selection.Find
.Text = Lab & " "
.Forward = True 'False=向上查找,(True=向下查找)
.MatchWildcards = False '不使用通配符
If Lab Like "*[0-9a-zA-Z.]" Then '此处判断标签的最后一个字符是否为英文或数字,是则不删除空格
Else
.Replacement.Text = Lab
.Execute Replace:=wdReplaceOne '替换找到的第一个,此处用作删除空格
endPt = endPt - 1 '删除空格后,末位减1
Selection.End = endPt
End If
End With

'在题注数字后添加一个空格
Selection.Fields.ToggleShowCodes '切换域代码,这样才能用^d查找域
With Selection.Find
.Text = "^d"
.Replacement.Text = "^& "
.Forward = False 'False=向上查找,(True=向下查找)
.MatchWildcards = False '不使用通配符
.Execute Replace:=wdReplaceOne '替换找到的第一个,此处用作添加空格
End With

'选定整个插入的题注内容,将域代码切换回来
endPt = endPt + 1 '增加空格后,末位加1
With Selection
.Start = startPt
.End = endPt
.Fields.ToggleShowCodes '切换域代码(切换回来)
End With

'将光标定位至题注所在段尾处
' Selection.MoveRight Unit:=wdCharacter, Count:=1 '此句光标返回插入题注前的原始位置,对于已经输好标题的情况并不合适
'选择段尾回车符
With Selection.Find
.Text = "^13"
.Forward = True 'False=向上查找,(True=向下查找)
.MatchWildcards = False '不使用通配符
.Wrap = wdFindContinue '继续查找
.Execute
End With
Selection.MoveLeft Unit:=wdCharacter, Count:=1 '定位到段尾回车前


End If
Application.ScreenUpdating = True '恢复屏幕更新

End Sub

*word中通过宏对某章节下图片批量插入题注

Function GetListString()

    Dim lngNumOfParagraphs As Long
    Dim strListValue As String
     
    On Error Resume Next
     
    Do
        If Err.Number Then Exit Do
         
        lngNumOfParagraphs = lngNumOfParagraphs + 1
        
        If (Selection.Previous(wdParagraph, lngNumOfParagraphs).Paragraphs.OutlineLevel <> wdOutlineLevelBodyText) Then
        
        
            strListValue = Selection.Previous(wdParagraph, lngNumOfParagraphs).Paragraphs(1).Range.Text
            GoTo Report_ListValue
        
        End If
        
         
    Loop
     
    Exit Function
     
Report_ListValue:
   ' MsgBox "The selected table is in chapter: " & strListValue
    strListValue = Left(strListValue, Len(strListValue) - 1)
    GetListString = strListValue
    
End Function

Sub 图片插入题注()

Dim titleA As String '初始章节标题

Dim titleB As String '当前图片所在章节标题

Dim s

Dim t

t = 0

titleA = GetListString()

For s = 1 To 10

    
    
    
    '查找下一个图片
    With Selection.Find
        .ClearFormatting
        .Text = "^g"
        .Execute Forward:=True
    End With
    
    titleB = GetListString()
    
    
    '如果图片已切换章节,则退出
    If (titleB <> titleA) Then
       Exit For
      '  t = 0
      '  titleA = titleB
        
        
    End If
    

     '判断是否为图片
    If Selection.Type = 7 Then
    
        '在图片下方换行
        Selection.MoveRight
        Selection.TypeParagraph
        
        '输入题注标题
        t = t + 1
        Selection.TypeText titleA & t
        
        '插入题注
        Selection.HomeKey Unit:=wdLine
        Selection.InsertCaption Label:="图", TitleAutoText:="InsertCaption3", _
        Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=0
             
        '题注居中
        Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter

        
    End If
    
    

Next s


End Sub


批量调整表格

表题注设置

   Sub adjustTable()
  '该代码可以批量调整技术报告的表格格式,每行有注释,可以情况进行自定义调整
  Dim i, j, k As Integer
  On Error Resume Next
  T = Timer
  Application.Browser.Target = wdBrowseTable
  Application.ScreenUpdating = False
  k = ActiveDocument.Tables.Count
  For i = 1 To k
   ActiveDocument.Tables(i).Style = "网格型 5" '设置表格样式为网格型 5
   For m = 1 To ActiveDocument.Tables(i).Rows.Count
     ActiveDocument.Tables(i).Rows(m).Range.Style = "表中文字"
    If m = 1 Then ActiveDocument.Tables(i).Rows(m).Range.Style = "表头"
          
   Next m
  '设置每个表格前一段落为图表头格式
  ActiveDocument.Tables(i).Range.Previous(wdParagraph, 1).Select
  Selection.Style = ActiveDocument.Styles("表") '设置表头的样式为样式名为“图表头”的样式,可更改成存在的样式
  j = j + 1
  'StatusBar = "正在调整第" & i & "个表格,共" & k & "个表格,请稍候..."
  Next i
  Application.ScreenUpdating = True
  'MsgBox "恭喜您!" & Chr(13) & Chr(10) & "已处理完" & j & "个表格,耗时" & Format(Timer - T, "0.00" & "秒。"), , "by sysware "
  End Sub

*批量调整表格并添加表头标题

Sub 批量修改表格()
    Dim tempTable As Table

    Application.ScreenUpdating = False

    If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then

        MsgBox "文档已保护,此时不能选中多个表格!"

        Exit Sub

    End If

    ActiveDocument.DeleteAllEditableRanges wdEditorEveryone

    For Each tempTable In ActiveDocument.Tables

        tempTable.Range.Editors.Add wdEditorEveryone

    Next

    ActiveDocument.SelectAllEditableRanges wdEditorEveryone

    ActiveDocument.DeleteAllEditableRanges wdEditorEveryone

    Application.ScreenUpdating = True

    

End Sub

Sub FormatAllTables()

For i = 1 To ActiveDocument.Tables.Count

       ' ActiveDocument.Tables(i).Style = "my"

        With ActiveDocument.Tables(i).Range.ParagraphFormat

        .LeftIndent = CentimetersToPoints(0)

        .RightIndent = CentimetersToPoints(0)

        .SpaceBefore = 0

        .SpaceBeforeAuto = False

        .SpaceAfter = 0

        .SpaceAfterAuto = False

        .LineSpacingRule = wdLineSpace1pt5

        .Alignment = wdAlignParagraphJustify

        .WidowControl = False

        .KeepWithNext = False

        .KeepTogether = False

        .PageBreakBefore = False

        .NoLineNumber = False

        .Hyphenation = True

        .FirstLineIndent = CentimetersToPoints(0)

        .OutlineLevel = wdOutlineLevelBodyText

        .CharacterUnitLeftIndent = 0

        .CharacterUnitRightIndent = 0

        .CharacterUnitFirstLineIndent = 0

        .LineUnitBefore = 0

        .LineUnitAfter = 0

        .MirrorIndents = False

        .TextboxTightWrap = wdTightNone

        .AutoAdjustRightIndent = True

        .DisableLineHeightGrid = False

        .FarEastLineBreakControl = True

        .WordWrap = True

        .HangingPunctuation = True

        .HalfWidthPunctuationOnTopOfLine = False

        .AddSpaceBetweenFarEastAndAlpha = True

        .AddSpaceBetweenFarEastAndDigit = True

        .BaseLineAlignment = wdBaselineAlignAuto

        End With

        ' 设置表中的字体及大小

        ActiveDocument.Tables(i).Select

         With Selection

         .Font.Size = 10

         .Font.Name = "宋体"

         .InsertCaption Label:="表", TitleAutoText:="InsertCaption1", Title:="", Position:=wdCaptionPositionAbove, ExcludeLabel:=0

        End With

        ActiveDocument.Tables(i).Cell(1, 1).Select

        With Selection

         .SelectRow

         .Font.Bold = True

         .Shading.BackgroundPatternColor = -603923969

         .ParagraphFormat.Alignment = wdAlignParagraphCenter

        End With

 Next

End Sub


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容