Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro Zeitversetzt starten

Makro Zeitversetzt starten
10.03.2008 08:20:31
J.
Hi Leute
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?

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Zeitversetzt starten
10.03.2008 08:25:54
Harald
Hallo J,
gar nicht, würde ich sagen.
Du kannst bestenfalls nach de Eingabe ein Makro starten, das zunächst einmal 5 Sekunden wartet, bevor es irgend etwas anderes tut. Siehe Hilfe zur Wait Methode:
Wait-Methode
Siehe auchBetrifftBeispielBesonderheitenHält das aktuell ausgeführte Makro bis zu einem angegebenen Zeitpunkt an. Gibt zum angegebenen Zeitpunkt True zurück.
Wichtig Die Wait-Methode unterbricht alle Aktivitäten von Microsoft Excel und verhindert unter Umständen auch das Ausführen sonstiger Vorgänge auf dem Computer. Hintergrundprozesse, wie Drucken und Neuberechnung, werden jedoch fortgesetzt.
Ausdruck.Wait(Time)
Ausdruck Erforderlich. Ein Ausdruck, der ein Application-Objekt zurückgibt.
Time Variant erforderlich. Der Zeitpunkt, zu dem das Makro fortgesetzt werden soll (im Datumsformat von Microsoft Excel).
Beispiel
In diesem Beispiel wird ein aktuell ausgeführtes Makro bis 18.23 Uhr desselben Tages unterbrochen.
Application.Wait "18:23:00"
In diesem Beispiel wird ein aktuell ausgeführtes Makro für ungefähr 10 Sekunden unterbrochen.
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
In diesem Beispiel wird eine Meldung angezeigt, dass 10 Sekunden abgelaufen sind.
If Application.Wait(Now + TimeValue("0:00:10")) Then
MsgBox "Time expired"
End If
Gruß Harald

Anzeige
AW: Makro Zeitversetzt starten
10.03.2008 08:43:00
Renee
Hi J.
Klar, schau dir die Application.OnTime Methode an.
GreetZ Renée

AW: Makro Zeitversetzt starten
10.03.2008 09:40:00
volti
Hallo Jay,
hier mal was API-Haftes:
Private Declare

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

Anzeige
AW: Makro Zeitversetzt starten
10.03.2008 10:19:52
J.
Hallo
Ich habe mich zunächst für die application.ontime methode entschieden.
mein macro startet nun, fügt einen text ein, speichert und schließt die datei.
nur excel gibt mir nun eine warnmeldung aus, das dieses makro nicht mit der digitalen signatur übereinstimmt und es wahrscheinlich durch einen virus verändert wurde. deshalb werden alle makros deaktiviert.
was kann ich nun tun? das makro ist in der hauptdatei digital signiert.
also sollte dieser fehler eigentlich nicht auftauchen

AW: Makro Zeitversetzt starten
10.03.2008 10:46:00
Tino
Hallo Karl-Heinz,
diese API- Funktion würde mich auch interessieren.
Verstehen du ich es soweit, aber kannst du mir auch sagen, was in den Bereich wo jetzt die zwei Nullen stehen rein kommt oder kommen kann?
SetTimer(0, 0, 5000, AddressOf MeineSub)
Danke
Gruß
Tino

Anzeige
AW: Makro Zeitversetzt starten
10.03.2008 11:09:12
volti
Hallo Tino,
in die ersten beiden Positionen gehört das Fensterhandle, zu welchem der Timer gehört und eine frei wählbare Timer-ID, woran die Handlingroutine des Fensters diesen Timer immer wieder erkennen kann.
Die jetzige o.a. Form ruft nach der festgelegten Zeitspanne nur die angegebene Prozedur auf. Sie benötigt daher weder ein Fensterhandle noch eine ID.
Du kannst den Timer aber auch direkt in Deiner Handlingroutine zu deinem Fenster (Programm) verarbeiten.
Windows ist messagebasiert, das heißt alle eingehenden Aktionen kommen über eine Message bei der festgelegten Fensterroutine z.B. WndProc an und werden durch diese dann in ihre Bestandteile zerlegt und abgearbeitet.
Die Parameter einer Message sind hWnd, Msg, wparam und lparam, also das betroffene Fenster, die Message, und zwei mögliche weitere Parameter.
Timeraktionen kommen bei Msg WM_TIMER an und werden dort anhand der Timer-ID erkannt.
So, ich hoffe ich habe es verständlich rüber gebracht. Weitere Infos hierzu findest Du im Internet.
viele Grüße
Karl-Heinz

Anzeige
AW: Makro Zeitversetzt starten
10.03.2008 11:17:00
Tino
Hallo Karl-Heinz,
danke erst mal für die schnelle Antwort.
Aber so richtig verstehe ich es nicht was du geschrieben hast.
Wen es keine umstände macht, könntest du mir ein simples Beispiel
Reinstellen?
Gruß
Tino

AW: Makro Zeitversetzt starten
10.03.2008 11:55:00
volti
Hallo Tino,
hier der zweite Versuch. Allerdings habe ich kein kleines Beispiel sondern nur große, deshalb nachfolgender Code nur zur Verständnisschärfung.
Wenn Du in Deiner Applikation ein Fenster erstellst, (fast alle Win-Programme bestehen zumindest mal aus einem Fenster), teilt Du in Deinem Programm dem Betriebssystem Windows mit, wohin die Messages für dieses Fenster gesendet werden sollen.
Nehmen wir an, dass alle Messages an die folgende Handlingroutine gesendet werden sollen.
Const ID_Timer = 5555

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

Anzeige
AW:Danke !!!!!
10.03.2008 15:12:00
Tino
Hallo volti,
dass muss ich mir mal in einer ruhigen Minute anschauen.
Danke erst mal für die ausführliche Info.
Gruß
Tino

AW: AW:Danke !!!!!
10.03.2008 16:04:00
volti
Upps,
da ist mir beim Tippeln noch ein Fehler unterlaufen:
Es muss natürlich If hTimer 0 And wParam= 5555 Then heißen, da die ID im ersten Parameter übergeben wird. sorry.
Gruß
KH

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige