word里要把所有图片统一调成一样大小,最快的办法不是一张张点「大小和位置」,直接写个宏就能按固定宽高一次性扫完整篇文档。下面操作都是用中文界面的word 2016演示,适合图片已经插好、只是尺寸乱飘的场景。
先提个前提:下面这段宏默认只处理嵌入型图片,就是和文字混排的那种图。要是你的图设成了「浮于文字上方」这类环绕型,得先全改成嵌入型再跑宏,不然你会发现好多图尺寸根本没动。
第一步:先确认文档里的图片确实大小不统一
开写宏之前先翻一遍文档,摸清楚现在的图到底乱在哪:有的宽度不对,有的高度忽大忽小,甚至同一页的几张图大小差很多,看着特别乱。先搞清楚自己的需求,后面才知道是要统一宽度、统一高度,还是宽高一起锁死。
要是只有两三张图大小不对,手动改反而更快;但只要文档里有几十张图,或者每页都插了图,手动调全是重复活。宏的用处就在这:同一套尺寸规则一次性套给所有图,不用来回点格式面板。

第二步:打开宏列表,新建专门改图尺寸的宏
在Word里按 Alt + F8,直接弹出宏窗口。新建一个好认的宏,比如叫 setpicsize,以后回头找、改参数、复用都不会认错。宏名尽量用英文或者拼音,别加空格和特殊符号,免得VBA报语法错。
这步不用搞复杂,建好宏名就是给后面的批处理代码留个入口,后面把代码粘进去保存运行,就能直接改当前文档里的所有图。

第三步:在 VBA 编辑器里写入批量改图尺寸代码
点「创建」就会跳转到VBA编辑器,把里面默认的空白内容删掉,贴入下面这段遍历全文档图片的代码。逻辑很简单:先数清楚当前文档里有多少张嵌入型图,从第一张开始挨个设置高和宽,全部改完自动退出。
这段代码没什么难度,最容易踩坑的就是对象名写错。这里用的是 ActiveDocument.InlineShapes,对应当前文档里的所有嵌入型图片集合。要是你抄错了对象名,或者文档里的图本来就不是嵌入型,运行完看起来像没报错,结果一张图都没改动。
Sub setpicsize()
Dim n As Long
On Error Resume Next
For n = 1 To ActiveDocument.InlineShapes.Count
ActiveDocument.InlineShapes(n).Height = 198.45
ActiveDocument.InlineShapes(n).Width = 283.5
Next n
End Sub

第四步:把目标宽高换成你自己的尺寸,留意纵横比锁定
上面代码里的 198.45 和 283.5,对应7厘米高、10厘米宽。想改成别的尺寸,直接换这两个数字就行。换算也很简单:1厘米约等于28.35磅,先算好你要的尺寸再改代码,别运行完才发现全文档的图都改错了。
还有个容易漏的点是纵横比。要是你直接把宽高都写死,所有图都会变成完全一样的尺寸,但如果原图比例差很多,个别图可能会被拉变形。要是优先保证图不变形,可以只固定宽度或者只固定高度;要是优先版面整齐,就直接把宽高都锁死。

第五步:运行宏后回到文档,重点检查极端尺寸图片
代码存好之后,回到Word界面再按一次 Alt + F8,选中刚才建的宏点「运行」,全文档的嵌入型图就会按你设好的规则统一调整。跑完别着急关文档,先去看几个最容易出问题的地方:特别长的竖图、特别扁的横图,还有之前尺寸差得最大的那几张。
要是这些极端尺寸的图都没问题,说明你设的这组尺寸合适;要是有几张明显被拉变形,回去把宏改成只固定宽度或者只固定高度,重新跑一遍就行。宏的好处就是可以反复试,不用像手动改那样从第一页翻到最后一页挨个调。

这类批量改图尺寸的宏,省时间的点根本不是会不会写VBA,而是把你反复点格式面板的重复操作变成一次性规则。只要文档里的图都是嵌入型,先定好目标宽高,用宏统一执行,处理几十张图和几百张图,花的功夫几乎没差。


















