Purtroppo gli effetti grafici in excel dipendono pesantemente dalle caratteristiche del processore grafico; non e' raro che effetti di movimento non siano resi o resi con effetto stroboscopico; in genere piu' veloci sono le macchine e piu' facile e' che l'effetto sia ...nascosto.
Intanto, invece di due set di codici che fanno le stesse cose puoi preparare una sub parametrizzata che gestisce l'immagine che indichi in fase di richiamo.
Poi, la tua Sub timeout rischia di farti aspettare la mezzanotte successiva, se la lanci proprio allo scoccare della mezzanotte; per questo quindi e' piu' saggio affidarsi alla funzione di sistema Sleep.
Infine non mi e' chiaro a cosa dovrebbe servire AppActivate, visto che sei su Excel e rimani sempre in Excel. Comunque ricordo che c'e' un differente comportamento tra le versioni XL2003 e XL2013 (non ricordo il comportamento di XL2007 e 2010); per questo in genere anche per la gestione delle finestre prefisco affidarmi alle Api di sistema, ad esempio la Function SetFocusAPI (ma ce ne sono diverse con funzioni analoghe), che si richiama usando "hWnd" (l'handle della finestra).
Cio' detto, in un Modulo standard ho inserito:
- Codice: Seleziona tutto
#If VBA7 Then '!!! RIGOROSAMENTE IN TESTA A UN MODULO STANDARD !!!!
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Sub PicRotate(ByRef ShpRef As Shape) 'Gestione parametrizzata della pic da ruotare
'
With ShpRef
.Visible = True
For rep = 1 To 360
.Rotation = rep
.Left = rep
If .Top >= 30 Then
.Top = 30
Else
.Height = rep
.Width = rep
Sleep 10
End If
Sleep 10
DoEvents
Next rep
End With
End Sub
Poi la Workbook_Open e' diventata
- Codice: Seleziona tutto
Private Sub Workbook_Open()
Foglio1.Shapes("Immagine 2").Visible = False
Foglio1.Shapes("Immagine 1").Visible = False
MsgBox ("Chiedi a questo signore se vuoi una risposta certa."), vbInformation
PicRotate Foglio1.Shapes("Immagine 1")
Sleep 3000
Foglio1.Shapes("Immagine 1").Visible = False
MsgBox ("Oppure a questo."), vbInformation
PicRotate Foglio1.Shapes("Immagine 2")
Sleep 3000
MsgBox ("Oppure cerca su google")
End Sub
Ciao