2011-03-01 48 views
0

我正在使用代碼根據使用VBA的用戶輸入在Excel中繪製一些自選圖形。但是,其中一些形狀可能會彼此堵塞,所以我想運行第二遍來測試哪些形狀堵塞,並將它們輕推直到它們不再堵塞。在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函數,但這似乎沒有多大用處(只在特定的屏幕座標處返回一個形狀,而不是相交的形狀)。

非常感謝您的幫助。

+0

爲什麼不將這些形狀放置到最初繪製它們的代碼中? – variant 2011-03-01 21:59:56

+0

爲你做了以下工作?如果是這樣,您可以選擇答案旁邊的空白複選標記 – 2011-04-05 20:41:15

回答

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 

此代碼將需要更多的工作,但考慮到頂部/底部和多個重疊,但這應該足以讓你開始。