2008-11-10 179 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