gibt es eine Möglichkeit ein Makro zeitversetzt zu starten?
Wenn ja, wie realisiere ich es , dass ca 5 sec nachdem jemand etwas irgendwo in auf einem Tabellenblatt verändert hat, ein Makro gestartet wird?
Function SetTimer Lib "user32" (ByVal hWnd As _
Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Private Declare
Function KillTimer Lib "user32" (ByVal hWnd As _
Long, ByVal nIDEvent As Long) As Long
Public hTimer As Long
Sub MeinStartMakro()
hTimer = SetTimer(0, 0, 5000, AddressOf MeineSub)
End Sub
Sub MeineSub()
MsgBox "Zeit abgelaufen"
KillTimer 0, hTimer
End Sub
Zunächst ruft Du MeinStartMarko auf, z.B. über einen Event (Clickevent, Chengeevent usw.)
Nach 5000 msec = 5Sekunden wird das hauptmakro aufgerufen, in den Du Deinen Code packst.
Nicht vergessen, den Timer mit KillTimer auszuschalten, sonst läuft Dein Makro alle 5 Sekunden ab.
In der Zwischenzeit (hier 5 Sekunden) laufen alle Windowsapplicationen komplett weiter.
viele Grüße
Karl-Heinz
Function WndProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As _
Long) As Long
Select Case wMsg
Case WM_Create
hTimer = SetTimer(hWnd, ID_Timer, 1000, ByVal Null)
Case WM_KEYDOWN
Case WM_MOUSEMOVE
Case WM_COMMAND
Case WM_LBUTTONUP, WM_RBUTTONUP
Case WM_TIMER
If hTimer 0 And ID_Timer = 5555 Then
'Mein weiterer Timercode kommt hierein
End If
EXIT
Function
Case WM_DESTROY
KillTimer hWnd, ID_Timer
End Select
WndProc = DefWindowProc(hWnd, wMsg, wParam, lParam)
End Function
-Beim Erstellen des Fensters wird die WM_Create-Nachricht gesendet. In dieser Phase setzen wir nun einen Timer mit der ID 5555 und einer Pollingzeit von einer Sekunde. Der letzte Parameter ist Null, da wir keine Verarbeitungsprozedur in diesem Falle haben.
-Nach Ablauf der Timerzeit sendet der Timer die WM_Timer-Nachricht an seine Handlingroutine. Hier können wir nun anhand der Timer-ID den richtigen Timer rausfischen und Aktionen ausführen.
-Wenn das Programm beendet wird wird eine WM_Destroy-Nachricht gesendet. In dieser Phase beenden wir nun den Timer mit der KillTimer-Funktion. (Wichtig)
Hoffe, jetzt ist es etwas durchsichtiger geworden. Habe noch ein paar weitere Msg mal reingeschrieben, damit Du siehst was es alles so gibt, nämlich einige hundert Msg. Natürlich fehlt überall der code dazwischen.
Ein komplett funktionierendes Beispiel sprengt glaube ich den Rahmen dieses Forums.
Noch Fragen?
viele Grüße
KH