因此,最近我一直在尝试为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
答案 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>
您可以进行形状生成的随机性处理,也可以在页面上随机选择一个空间(将随机性基于剩余空间而不是整个页面),然后将其中一个随机形状放入其中空间。
在编写该算法时,我将自己留作练习,但这并不难产生。