2008-11-10 177 views
2

我試圖動畫的Visio與一個循環的對象,如:VBA動畫對象

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

    sh1.SetCenter xpos, ypos 

    Sleep 1000 

Next reposition 

雖然這並從起始位置到終止移動對象,中間步驟是不可見。延遲後只顯示最終位置。

如果我將MsgBox放在循環中,那麼每個中間位置都是可見的,但必須單擊一個分散注意力的中心位置框才能看到這些位置。

如何在沒有用戶交互的情況下使流動可見並通過模態窗口覆蓋屏幕?

回答

3

嘗試DoEvents聲明你的睡眠之前

0

請確保您有Application.Screenupdating設置爲true ...我有一個類似的宏,動畫的形狀,我也不需要使用的DoEvents更新屏幕...

+0

嗨喬恩, 感謝您的建議,但是當我把在 Application.ScreenUpdating =真 ,拿出的DoEvents行,然後,這幅畫並不在循環過程更新,但只顯示最後的位置。我究竟做錯了什麼? bsperlin – user32848 2008-11-11 18:31:25

1

謝謝,DJ! 完美運作。爲了下一個需要示例的人的好處,下面是我的代碼,它移動已放置在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