如何为Corel X5创建一个对象定位宏?

时间:2015-02-17 09:52:50

标签: vba coreldraw

我在文档上放置了堆叠的对象(直接从文件夹中拖出,并手动放置在第一个对象所在的位置)。对象的数量各不相同,因此我需要考虑到这一点的代码。因此,应定位物体,使每个物体之间的距离水平为30毫米。垂直位置不得改变。其中一个对象(堆栈的最后一个或第一个)的位置应保持不变。我知道如何只使用动作来做到这一点,但问题是所用对象的数量。数量不匹配时发生错误 我需要使用条件句吗?如何定义形状等?
这是我记录动作的方式:首先我选择了顶部物体并将其水平移动了30毫米。然后我将堆栈顶部的下一个对象添加到现有选择中。然后我将选定的物体移动了30mm。我再次选择堆栈顶部的新对象进行选择并执行运动。我这样做,直到堆栈的最后一个对象单独在其原始位置。在这种情况下,使用了8个对象。这是使用操作创建的代码:

Sub positioning()
    ' Recorded 16.2.2015
    ActiveLayer.Shapes(1).Move 1.181102, 0#
    ActiveDocument.CreateShapeRangeFromArray(ActiveLayer.Shapes(2), ActiveLayer.Shapes(1)).Move 1.181102, 0#
    ActiveLayer.Shapes(3).AddToSelection
    ActiveSelection.Move 1.181102, 0#
    ActiveLayer.Shapes(4).AddToSelection
    ActiveSelection.Move 1.181102, 0#
    ActiveLayer.Shapes(5).AddToSelection
    ActiveSelection.Move 1.181102, 0#
    ActiveLayer.Shapes(6).AddToSelection
    ActiveSelection.Move 1.181102, 0#
    ActiveLayer.Shapes(7).AddToSelection
    ActiveSelection.Move 1.181102, 0#
End Sub

我已经谷歌搜索了很多关于VBA但是找不到足够简单的帮助来解决这种情况。如果有人想到或展示如何编程,我将不胜感激,对我来说将是一个巨大的帮助!

1 个答案:

答案 0 :(得分:0)

应该是这样的:

Set sr = ActivePage.SelectableShapes.All
For i = 1 to sr.count
  sr(i).move (1.181102 * i), 0#
Next i

当然,您应该先将每个sr(i)放在位置参考上:) 像这样:

sr(i).positionX = 0
sr(i).positionY = 0