VBA анимация объектов Visio - PullRequest
2 голосов
/ 10 ноября 2008

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

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

    sh1.SetCenter xpos, ypos

    Sleep 1000

Next reposition

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

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

Как сделать поток видимым без вмешательства пользователя и прикрытия экрана модальным окном?

Ответы [ 3 ]

3 голосов
/ 10 ноября 2008

Попробуйте DoEvents утверждение перед сном

1 голос
/ 11 ноября 2008

Спасибо, диджей! Это сработало отлично. Для удобства следующего человека, которому нужен пример, ниже приведен мой код, который перемещает значок процесса, который был помещен в сетку 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
0 голосов
/ 11 ноября 2008

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

...