Microsoft Word VBA pos更改了吗?

时间:2018-11-01 17:24:16

标签: vba ms-word

因此,最近我一直在尝试为Microsoft Word创建宏,但我遇到了一些障碍。 我实际上想做的只是覆盖整个页面的形状,但不要让它们重叠。 当前,这些形状最终只是沿左上角和右下角之间的直线移动,没有其他地方,并且不断重叠。 我想知道是否可以完成整个页面上的形状而不重叠? 我的脚本是:

Sub Wait(n As Long)
    Dim t As Date
    t = Now
    Do
        DoEvents
    Loop Until Now >= DateAdd("s", n, t)
End Sub

Sub Pause()
    Wait 0.1
End Sub

Sub Test()
    Dim shpCanvas As Shape
    Dim shpCanvasShapes As CanvasShapes
    Dim shpCnvItem As Shape

    ShapeSize = 250 * Rnd() + 250
    Set shpCanvas = ActiveDocument _
                    .Shapes.AddCanvas(Left:=ShapeSize, Top:=ShapeSize, _
                                      Width:=50, Height:=75)
    Set shpCanvasShapes = shpCanvas.CanvasItems

    With shpCanvasShapes
        .AddShape Type:=msoShapeIsoscelesTriangle, _
                  Left:=0, Top:=0, Width:=50, Height:=50
        .AddShape Type:=msoShapeOval, _
                  Left:=10, Top:=25, Width:=30, Height:=10
        .AddShape Type:=msoShapeOval, _
                  Left:=20, Top:=25, Width:=10, Height:=10
    End With
    Pause
End Sub

谢谢,Xander

2 个答案:

答案 0 :(得分:0)

这是个主意,但是编写代码可能并不容易。定义一个34 x 44的数组,或者页面上每个四分之一英寸见方的值。从填充为False的数组开始。

生成随机形状和随机位置。计算形状将覆盖哪个四分之一英寸的正方形。检查数组中是否有所有这些四分之一英寸平方的False值。

  • 如果所有均为False,则将形状添加到Word文档中。对于该形状覆盖的每个四分之一英寸的正方形,在数组中输入True值。

  • 如果任何一个为True,则生成另一个形状并重复测试。

当已生成100个形状而没有添加到Word文档中时,停止宏。

答案 1 :(得分:0)

您需要更好的算法。它们从左上角开始到右下角的原因是以下代码行:

.Shapes.AddCanvas(Left:=ShapeSize, Top:=ShapeSize, _
                                      Width:=50, Height:=75)

在上面,您将Left设置为与Top成比例(在这种情况下,实际上是相等的,因为您每次都使用ShapeSize),所以有一个线性函数。 / p>

您可以进行形状生成的随机性处理,也可以在页面上随机选择一个空间(将随机性基于剩余空间而不是整个页面),然后将其中一个随机形状放入其中空间。

在编写该算法时,我将自己留作练习,但这并不难产生。