VBA操作WORD(五)批量调整图片大小、居中设置

在word里保存比较大的图片,都大得超出了word的边界了,也没有居中,数量又多,不可能手动一张张调整。

第一种方法经过测试,只是前面部分有效,后面部分无效。

Sub setpicsize() '设置图片尺寸

'第一种方法,经测试,文档前面部分图片有效,后面部分无效
    'Dim n '图片个数
    'On Error Resume Next '忽略错误
    'For n = 1 To ActiveDocument.InlineShapes.Count 'InlineShapes 类型 图片
    'ActiveDocument.InlineShapes(n).Height = 198.45 '设置图片高度为 7cm
    'ActiveDocument.InlineShapes(n).Width = 455 '单位是像素,设置图片宽度 16cm
    'Next n
End Sub

 第二种方法,经测试,对整篇文档图片有效:

Sub 设置图片格式()
    '1.如果图片行间距设置为固定值,那么无论图片设置什么格式,图片嵌入文字会重叠,只显示部分图片。
    '2.如果图片超出边界才进行处理,设置全文图片大小不超过某个规格,超过则等比例缩小
    Dim picMaxWidth, picMaxHeight, picWith, picHeight As Long
    '纸张宽减去左右边距,不用再乘以28.35,已经是像素
    picMaxWidth = (ActiveDocument.PageSetup.PageWidth - ActiveDocument.PageSetup.LeftMargin - ActiveDocument.PageSetup.RightMargin)
    picMaxHeight = (ActiveDocument.PageSetup.PageHeight - ActiveDocument.PageSetup.TopMargin - ActiveDocument.PageSetup.BottomMargin)
    Dim oILS As InlineShape
    For Each oILS In ActiveDocument.InlineShapes 'Selection.InlineShapes
        If oILS.Type = wdInlineShapePicture Then
        oILS.Select
            oILS.LockAspectRatio = msoTrue '锁定纵横比,防止默认没有锁定修改了图片变形;不锁定纵横比是msoFalse
            Selection.Range.ShapeRange.LockAspectRatio = msoTrue
            'MsgBox("图片宽度" & oILS.Width) '测试,提示图片大小以便判断单位'此处单位是像素。
            picWidth = oILS.Width
            picHeight = oILS.Height
            If oILS.Width > picMaxWidth Then
                'Word中的尺寸单位默认是cm(厘米),而1cm等于28.35px(像素),由于代码中换算设置的单位是px(像素)。
                '所以就用尺寸高度或宽度值乘像素值。即为:7*28.35=198.45;宽度换算方法与此相同。
                oILS.Width = Abs(picMaxWidth) '此处单位是厘米。如果Word设置页边距为适中,则中间内容宽17.08CM
                '注意:如果此处不设置图片高度,即使锁定纵横比,图片纵横比也会改变,不知道为什么?
                oILS.Height = oILS.Width * picHeight / picWidth 'CentimetersToPoints(7)
            End If
            '可能超过宽度调节后,高度还是超出了
            If oILS.Height > picMaxHeight Then
                oILS.Height = Abs(picMaxHeight)
                oILS.Width = oILS.Height * picWidth / picHeight
            End If

            'oILS.Range.Select
            'Selection.ClearFormatting
            'Selection.Range.Paragraphs.Alignment = wdAlignParagraphCenter
            With oILS
                .Range.ParagraphFormat.Reset
                '.Range.ParagraphFormat.LineSpacingRule = wdLineSpaceSingle '单倍行距
                .Range.ParagraphFormat.Alignment = wdAlignParagraphCenter '居中
            End With
        End If
    Next
End Sub

上述代码注意两点,一是即使设置了锁定纵横比,如果只设置了宽度或者高度其一,图片依然没有等比例缩小,所以高度和宽度都要设置才行。

二是宽度缩小后,高度仍可能超出页面,所以还需要对高度再检查和缩小一次。

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值