Attribute VB_Name = "Common_Shape" Option Explicit ' ================= 通用排版引擎(仅调整位置) ================= Public Sub AlignIconsByCenter(sheetName As String, anchorAddr As String, _ iconArr As Variant, gapPt As Double) Dim ws As Worksheet Dim anchor As Range Dim shp As Shape Dim i As Long Dim shapeCount As Long On Error Resume Next Set ws = ThisWorkbook.Worksheets(sheetName) On Error GoTo 0 If ws Is Nothing Then Exit Sub Set anchor = ws.Range(anchorAddr) shapeCount = UBound(iconArr) - LBound(iconArr) + 1 ' 第一个图标左边对齐B3左边 Dim curX As Double: curX = anchor.Left Dim prevX As Double: prevX = 0 Dim cy As Double: cy = anchor.Top + anchor.Height / 2 Application.ScreenUpdating = False For i = LBound(iconArr) To UBound(iconArr) Set shp = ws.Shapes(iconArr(i)) shp.Placement = xlFreeFloating shp.Left = curX shp.Top = cy - shp.Height / 2 If i = LBound(iconArr) Then Debug.Print iconArr(i) & ": left=" & curX & ", width=" & shp.Width Else Debug.Print iconArr(i) & ": left=" & curX & ", gap=" & (curX - prevX) & ", width=" & shp.Width End If prevX = curX + shp.Width curX = curX + shp.Width + gapPt Next i Application.ScreenUpdating = True End Sub ' ================= 你的专属调用入口 ================= Sub RunAlignForMySheet() AlignIconsByCenter _ sheetName:="M1", _ anchorAddr:="B3", _ iconArr:=Array("input", "check", "output", "sort", "filter", "fit", "load"), _ gapPt:=10 End Sub