0

コードを使用して、VBAを使用したユーザー入力に基づいてExcelで多数のオートシェイプを描画しています。ただし、これらの形状の一部は互いに閉塞している可能性があるため、2回目のパスを実行して、どの形状が閉塞するかをヒットテストし、閉塞しなくなるまで微調整します。

したがって、基本的な擬似コードの概要は次のようになります。

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つの図形のみを返します)。

助けてくれて本当にありがとうございます。

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 に答える