看代码没考虑到90、270度旋转的图片。
把For each SH in Sheets这句删除
删除下面的1个Next
把For each ShapePic in SH.Shapes这句改成:
For each ShapePic in Selection.ShapeRange
如果图片大小不超过单元格,代码是没有问题的,我参照进行了改写,执行效果满意,效果和代码见下面两图:
改写中,由于测试表全部是形状,取消了if判断,代码为了调试观察增加了两个中间变量,可以进一步简化如下为:
Option Explicit
Sub 图片居中()
Dim st As Worksheet, pic As Shape, r As Range
For Each st In Worksheets
For Each pic In st.Shapes
Set r = pic.TopLeftCell.MergeArea
pic.Left = r.Left + (r.Width - pic.Width) / 2
pic.Top = r.Top + (r.Height - pic.Height) / 2
Next pic
Next st
End Sub