Здравствуйте, уважаемые Умы. Хочу обратиться с тяжелым вопросом.
У меня есть макрос, разработанный программистом по имени ZVI (небезызвестным в определенных кругах). Этот макрос двигает автофигуру Овал - то к одному пункту на листе, то к другому.
Подскажите, как заставить автофигуру - двигаться по маршруту, указанному в таблице? (В таблице указаны координаты пунктов поочередного перемещения автофигуры Овал.)
Здравствуйте, уважаемые Умы. Хочу обратиться с тяжелым вопросом.
У меня есть макрос, разработанный программистом по имени ZVI (небезызвестным в определенных кругах). Этот макрос двигает автофигуру Овал - то к одному пункту на листе, то к другому.
Подскажите, как заставить автофигуру - двигаться по маршруту, указанному в таблице? (В таблице указаны координаты пунктов поочередного перемещения автофигуры Овал.)OlegSmirnov
' ZVI:2011-09-17 для Юрия_М ' Анимационное перемещение объекта Obj1 в центр объекта Obj2 Sub Obj1ToObj2_1(Obj1, Obj2, Optional Steps = 20) Const dt# = 0.02 Dim x1#, x2#, y1#, y2#, x#, y#, t! Dim l1#, t1#, w1#, h1#, l2#, t2#, w2#, h2#
With Obj1 l1 = .Left: t1 = .Top: w1 = .Width: h1 = .Height End With l2 = Obj2(1, 1): t2 = Obj2(1, 2) ' With Obj2 ' l2 = .Left: t2 = .Top: w2 = .Width: h2 = .Height ' End With x1 = l1 + w1 / 2 y1 = t1 + h1 / 2 x2 = l2 ' + w2 / 2 y2 = t2 ' + h2 / 2 With Obj1 For x = x1 To x2 Step (x2 - x1) / Steps y = (x2 * y1 - x1 * y2 - (y1 - y2) * x) / (x2 - x1) .Left = x - w1 / 2 .Top = y - h1 / 2 t = Timer + dt While Timer < t: Wend DoEvents: Next x = x2: y = y2: .Left = x - w1 / 2: .Top = y - h1 / 2 DoEvents End With End Sub
[/vba][vba]
Код
Sub test() Dim lr&, i&
With Лист1 lr = .Cells(Rows.Count, "n").End(xlUp).Row For i = 6 To lr Obj1ToObj2_1 .Shapes("Oval 1"), .Cells(i, "n").Resize(, 2).Value Next i End With End Sub
[/vba]
OlegSmirnov, здравствуйте, попробуйте так: [vba]
Код
' ZVI:2011-09-17 для Юрия_М ' Анимационное перемещение объекта Obj1 в центр объекта Obj2 Sub Obj1ToObj2_1(Obj1, Obj2, Optional Steps = 20) Const dt# = 0.02 Dim x1#, x2#, y1#, y2#, x#, y#, t! Dim l1#, t1#, w1#, h1#, l2#, t2#, w2#, h2#
With Obj1 l1 = .Left: t1 = .Top: w1 = .Width: h1 = .Height End With l2 = Obj2(1, 1): t2 = Obj2(1, 2) ' With Obj2 ' l2 = .Left: t2 = .Top: w2 = .Width: h2 = .Height ' End With x1 = l1 + w1 / 2 y1 = t1 + h1 / 2 x2 = l2 ' + w2 / 2 y2 = t2 ' + h2 / 2 With Obj1 For x = x1 To x2 Step (x2 - x1) / Steps y = (x2 * y1 - x1 * y2 - (y1 - y2) * x) / (x2 - x1) .Left = x - w1 / 2 .Top = y - h1 / 2 t = Timer + dt While Timer < t: Wend DoEvents: Next x = x2: y = y2: .Left = x - w1 / 2: .Top = y - h1 / 2 DoEvents End With End Sub
[/vba][vba]
Код
Sub test() Dim lr&, i&
With Лист1 lr = .Cells(Rows.Count, "n").End(xlUp).Row For i = 6 To lr Obj1ToObj2_1 .Shapes("Oval 1"), .Cells(i, "n").Resize(, 2).Value Next i End With End Sub