需求:经常阅读网上的研报(没钱买排版漂亮的高质量研报),有些需要保存的复制下来到word里,图片很大都超出word的边界了,也没有居中,手工一张张调整不现实,上百页的研报,几十张图片。
解决方案:利用VBA宏批量解决。第一种方法经过测试,只是前面部分有些,后面部分无效,不知道何解。
以下是代码:
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 ‘第二种方法,经测试,对整篇文档图片有效 Dim Shap As InlineShape For Each Shap In ActiveDocument.InlineShapes If Shap.Type = wdInlineShapePicture Then ‘Shap.LockAspectRatio = msoFalse ‘不锁定纵横比 ‘MsgBox "图片宽度" & Shap.Width‘测试,提示图片大小以便判断单位 If Shap.Width > 485 Then ‘此处单位是像素;如果图片超出边界才进行处理,否则图片放大看起来不好看。 ‘Word中的尺寸单位默认是cm(厘米),而1cm等于28.35px(像素),由于代码中换算设置的单位是px(像素)。所以就用尺寸高度或宽度值乘像素值。即为:7*28.35=198.45;宽度换算方法与此相同。 Shap.Width = CentimetersToPoints(17) ‘此处单位是厘米。如果Word设置页边距为适中,则中间内容宽17.08CM ‘Shap.Height = CentimetersToPoints(7) ‘高度不设置,默认锁定纵横比 End If ‘设置图片居中 Shap.Range.Select Selection.ClearFormatting ‘如果Word中图片设置了行距不是1,比如固定值30磅,则无论图片设置什么格式,嵌入式会造成只显示一部分图片。 Selection.Range.Paragraphs.Alignment = wdAlignParagraphCenter End If Next End Sub
原文:https://www.cnblogs.com/GuominQiu/p/10587405.html