2008-11-10 6 views
2

J'essaie d'animer des objets Visio avec une boucle, comme:animation VBA d'objets Visio

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

    sh1.SetCenter xpos, ypos 

    Sleep 1000 

Next reposition 

Bien que cela ne se déplace l'objet de la position initiale à la fin, les étapes intermédiaires ne sont pas visibles . Après un délai, seule la position finale est affichée.

Si je mets un MsgBox dans la boucle, alors chaque position intermédiaire est visible mais il faut cliquer sur une case centrée, distrayante, pour les voir.

Comment rendre le flux visible sans intervention de l'utilisateur et recouvrement de l'écran par une fenêtre modale?

Répondre

3

Essayez une déclaration DoEvents avant votre sommeil

0

Assurez-vous que vous avez Application.ScreenUpdating à true ... J'ai une macro similaire qui anime une forme et je ne ai pas besoin d'utiliser DoEvents pour mettre à jour l'écran ...

+0

Salut Jon, Merci pour la suggestion, mais quand je mets en Application.ScreenUpdating = True et a pris la ligne DoEvents alors l'image n'a pas mis à jour au cours de la boucle, mais seulement a montré la finale position. Qu'est-ce que je fais mal? bsperlin – user32848

1

Merci, DJ! Cela a fonctionné parfaitement. Pour le bénéfice de la prochaine personne qui a besoin d'un exemple, voici mon code qui déplace une icône de processus qui a été placée sur une grille Visio et montre le mouvement continu (animation) (en regardant l'aperçu il semble que mon indentation a été éliminée):

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