Хит-тестирование и разрешение окклюзии автоформ в Excel - PullRequest
0 голосов
/ 01 марта 2011

Я использую код для рисования нескольких автоформ в Excel на основе пользовательского ввода с использованием VBA.Однако некоторые из этих фигур могут перекрывать друг друга, поэтому я хотел бы выполнить второй проход, чтобы проверить, какие фигуры закрывают, и подталкивать их до тех пор, пока они больше не закрываются.:

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, но это, кажется, не очень полезно (возвращает только одну форму по определенной экранной координате, а не пересекающиеся формы).

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 02 марта 2011

Вы можете сделать что-то вроде следующего:

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

Этот код потребует дополнительной работы, чтобы учесть верхнее / нижнее и множественные перекрытия, но этого должно быть достаточно для начала.

...