0

我正在使用代码根据使用 VBA 的用户输入在 Excel 中绘制许多自选图形。但是,其中一些形状可能会相互遮挡,因此我想运行第二遍以命中测试哪些形状被遮挡并轻推它们直到它们不再被遮挡。

所以基本的伪代码大纲是:

do
    foreach shape s in shapes
        if (s.hittest(shapes)) then
            do
                s.nudgeup(1)
            until (!s.hittest(shapes))
        endif
    next
until (!shapes.hittest(shapes))

你们中的任何人都可以想出某种方法来做到这一点(或者甚至可以解决这个问题,因此不必这样做)?

我已经查看了 RangeFrom 函数,但这似乎没有多大用处(仅返回特定屏幕坐标处的一个形状,而不是相交的形状)。

非常感谢您的帮助。

4

1 回答 1

0

您可以执行以下操作:

Sub MoveShapes()
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    Dim sh As Worksheet
    Set sh = wb.ActiveSheet
    Dim s1 As Shape
    Dim s2 As Shape

    For i = 1 To sh.Shapes.Count
        If i < sh.Shapes.Count Then
            Set s1 = sh.Shapes(i)
            Set s2 = sh.Shapes(i + 1)
            If s2.Left < (s1.Left + s1.Width) Then
                s2.Left = (s1.Left + s1.Width + 1)
            End If
        End If
    Next
End Sub

然而,这段代码需要更多的工作来解释顶部/底部和多个重叠,但这应该足以让你开始。

于 2011-03-02T00:17:27.307 回答