VBA-анимация объектов Visio

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

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

    sh1.SetCenter xpos, ypos

    Sleep 1000

Next reposition

Хотя это ДЕЙСТВИТЕЛЬНО перемещает объект из начальной позиции в конечную, промежуточные шаги не видны. После задержки отображается только конечная позиция.

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

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


person user32848    schedule 10.11.2008    source источник


Ответы (3)


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

person DJ.    schedule 10.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
person user32848    schedule 11.11.2008

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

person Jon Fournier    schedule 11.11.2008
comment
Привет, Джон, спасибо за предложение, но когда я вставил Application.ScreenUpdating = True и удалил строку DoEvents, изображение не обновлялось во время цикла, а показывало только конечную позицию. Что я делаю не так? бперлин - person user32848; 11.11.2008