2008-11-10 6 views
2

Я пытаюсь оживить Visio объектов с помощью цикла, такие как:VBA анимация Visio объектов

For reposition = 2 To 6 
    xpos = reposition 
    ypos = reposition 

    sh1.SetCenter xpos, ypos 

    Sleep 1000 

Next reposition 

Хотя это переместить объект из исходного положения до окончания, промежуточные шаги не видны , После задержки отображается только конечная позиция.

Если я поместил в петлю MsgBox, то каждое промежуточное положение видно, но нужно щелкнуть отвлекающее, расположенное по центру окно, чтобы увидеть их.

Как я могу сделать поток видимым без взаимодействия пользователя и покрытия экрана с помощью модального окна?

ответ

3

Попробуйте DoEvents заявления до сна

0

Убедитесь, что Application.ScreenUpdating установлен так ... У меня есть аналогичный макрос, который оживляет форму и мне не нужно использовать DoEvents для обновления экрана ...

+0

Привет Джон, Спасибо за предложение, но когда я ставлю в Application.ScreenUpdating = True и вынул линию DoEvents то картина не обновлялась в течение цикла, но только показала окончательную должность. Что я делаю не так? bsperlin – user32848 2008-11-11 18:31:25

1

Спасибо, ди-джей! Это сработало отлично. В интересах следующего человека, которому нужен пример, ниже мой код, который перемещает значок процесса, который был помещен в сетку Visio, и показывает непрерывное движение (анимация) (при просмотре, кажется, что мой отступ был устранен):

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
Sub testa() 
    Dim sh1 As Visio.Shape 

    Dim pagObj As Visio.Page 
    Dim xpos As Double 
    Dim ypos As Double 

    Set pagObj = ThisDocument.Pages.Item(1) 
    Set sh1 = pagObj.Shapes.Item(1) 

    Dim reposition As Double 

    reposition = 2# 

    While reposition < 6# 
     xpos = reposition 
     ypos = reposition 

     sh1.SetCenter xpos, ypos 

     DoEvents 

     Sleep 100 

     reposition = reposition + 0.2 
    Wend 

End Sub 
Смежные вопросы