## CorelDRAW 好像没有多个物件的对准排列,工作中又经常用到,所以写了个简单代码 ``` Sub 傻瓜火车排列() ActiveDocument.ReferencePoint = cdrBottomLeft '// 设置对准基准 左下 Dim ssr As ShapeRange, s As Shape '// 定义选择物件数组 ssr, 和遍历物件 s Dim cnt As Integer '// 定义物件个数计数器 Set ssr = ActiveSelectionRange cnt = 1 For Each s In ssr If cnt > 1 Then s.SetPosition ssr(cnt - 1).LeftX + ssr(cnt - 1).SizeWidth, ssr(cnt - 1).BottomY cnt = cnt + 1 Next s End Sub ``` ## 修改优化 ``` Sub 傻瓜火车排列() Dim ssr As ShapeRange, s As Shape Dim cnt As Integer Set ssr = ActiveSelectionRange cnt = 1 ActiveDocument.ReferencePoint = cdrBottomLeft For Each s In ssr If cnt > 1 Then s.SetPosition ssr(cnt - 1).RightX, ssr(cnt - 1).BottomY cnt = cnt + 1 Next s End Sub Sub 傻瓜阶梯排列() Dim ssr As ShapeRange, s As Shape Dim cnt As Integer Set ssr = ActiveSelectionRange cnt = 1 ActiveDocument.ReferencePoint = cdrTopLeft For Each s In ssr If cnt > 1 Then s.SetPosition ssr(cnt - 1).LeftX, ssr(cnt - 1).BottomY cnt = cnt + 1 Next s End Sub ``` ### 从左到右排序 ``` Dim s As Shape Dim sr As ShapeRange ActiveDocument.Unit = cdrMillimeter Set sr = ActiveSelectionRange Dim i As Integer i = sr.count ' sr.sort " @shape1.Top * 100 - @shape1.Left > @shape2.Top * 100 - @shape2.Left" sr.sort " @shape1.top>@shape2.top" sr.sort " @shape1.left<@shape2.left" Dim j As Integer For j = 2 To i ' sr.Shapes.Item(j).TopY = sr.Shapes.Item(j - 1).TopY sr.Shapes.Item(j).LeftX = sr.Shapes.Item(j - 1).RightX + TextBox63 Next ```