Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1100to1104
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
Inhaltsverzeichnis

Makro per code stoppen

Makro per code stoppen
Steve
Hallo,
ich habe folgendes Problem.
Eine Anwendung wird aus Excel heraus gestartet, ruft ein Timerobjekt auf, (welches in regelmäßigen Zeitabständen prüft ob eine Bestimmte Anwendung noch läuft) und startet ein weiteres Makro.
Durch dieses Timerobjekt ist es möglich zwei Prozess gleichzeitig laufen zulassen. Threads gibts ja soweit ich weis nicht in VBA.
Durch das Timerobjekt wird in vorgegebenen Abständen eine Funktion namesn TimerProc gestartet, welche weiteren Code abarbeitet. Ab einen bestimmten Zeitpunkt bzw. unter einer bestimmten Bedingung soll das Makro, welche ja ebenfalls läuft, abgebrochen werden.
Nur weis ich nicht, wie ich das realisieren soll.
Mein erster versuch war es, die Tastenkombination "Strg+Untbr" welche ein Makro aus Excel stopp, simulieren zu lassen. Aber leider hat das nicht geklappt.
Hat jemand eine Idee?
Danke
Gruß
Steve

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro per code stoppen
11.09.2009 12:54:31
JogyB
Hi.
Ich bin nicht 100%ig sicher, was wann wie gemacht wird... kannst Du den Code mal posten?
Aber ich werfe jetzt mal ein "End" in die Runde... vielleicht hilft Dir das ja schon. Der Timer wird dadurch aber nicht gestoppt, das mußt Du extra erledigen.
Gruss, Jogy
AW: Makro per code stoppen
11.09.2009 13:24:00
Steve
ich versuch mal das Problem mit etwas code zu schildern.
1. Button startet:

Private Sub btn_startApp_Click()
Dim sWinPath As String
Dim maxTime As Long
'Einlesen der Zeit zum "kill" aus dem worksheet
maxTime = Worksheets("Tabelle1").Cells("3", "E").Value * 60000
'starte den Timer mit der angegebenen Zeit
EnableTimer maxTime
sWinPath = Environ("WinDir")
If Right$(sWinPath, 1)  "\" Then _
sWinPath = sWinPath & "\"
lTaskID = Shell(sWinPath & "notepad.exe", vbNormalFocus)
Modul2.Makro2
'Mappe speichern, damit die neuen sheets erhalten bleiben
ThisWorkbook.Save
End Sub
' Startet den Timer mit dem übergebenen Zeitintervall

Public Function EnableTimer(ByVal msInterval As Long)
If hEvent  0 Then Exit Function
hEvent = SetTimer(0&, 0&, msInterval, AddressOf TimerProc)
End Function

Public Sub TimerProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long)
' hier soll er das Makro2, welche ebenfalls läuft abbrechen!
End Sub
Sub Makro2()
Worksheets("Tabelle1").Cells("8", "D").Value = "gestartet - aktive"
Wait (100000)
MsgBox ("Fertig"), vbInformation
Worksheets("Tabelle1").Cells("8", "D").Value = "beendet"
End Sub
Ich hoffe ich konnte es etwas veranschaulichen, welche Problem ich habe. Wie kann ich nun das Makro aus der Funktion des Timers heraus killen?
Anzeige
AW: Makro per code stoppen
11.09.2009 13:55:01
JogyB
Hi.
Hmm... habe grade keine Zeit mehr zum Testen, da ich dringend weg muss, aber als Lösung:
Definiere eine globale boolsche Variable aBBruch
Zum Abbrechen setzt Du einfach aBBruch=True in der Prozedur TimerProc
Und in Makro2 ersetzt Du das Wait(100000) durch
    Do
Wait (1000)
Loop Until aBBruch = True
Damit wird sekündlich überprüft, ob Makro2 beendet werden kann.
In Private Sub btn_startApp_Click() muss ganz am Anfang (nach der Variablendeklaration) noch ein aBBruch = False , da globale Variablen nach Abarbeiten des Codes nicht zurückgesetzt werden.
Gruss, Jogy
Anzeige
AW: Makro per code stoppen
14.09.2009 08:44:22
Steve
Morgen,
danke Jogy für deine Antwort, jedoch ist das gerade mein Problem. Das Problem ist, dass das Marko2 höchst wahrscheinlich hängen bleibt. (Das makro für mehre Scripte aus) Somit reagirt das Makro auch nciht mehr. Deshalb wäre die einziege Möglichkeit das Makro aus der parallel laufenden TimerProc Funktion zu killen. Gibt es dahin gehen irgend eine Möglichkeit?
AW: Makro per code stoppen
14.09.2009 11:40:44
JogyB
Hi.
Hast Du es mal mit dem End probiert? Das sollte jeden aktuell ausgeführten Code beenden. Wobei die Frage ist, ob TimerProc überhaupt ausgeführt wird, wenn Makro2 hängen bleibt.
Im Endeffekt ist aber bei Dir der komplette Code vermurkst, denn so eine Situation sollte gar nicht erst eintreten.
Gruss, Jogy
Anzeige
AW: Makro per code stoppen
14.09.2009 12:19:03
Steve
Hallo Jogy,
eigentlich stimme ich dir da voll und ganz zu, aber diese Situation ist eine Außnahme.
Das Makro2 startet eigentlich eine andere Anwendung, welche mehrer Scripte durchläuft, testet und anschließend die Ergebenisse wieder in einem Excelsheet schreibt. Aber gerade beim Testen dieser script kommt es nun mal auch schon zu fehler (beim Testen normal ;-) ) und dann hängt Excel sozusagen.
Falls man das Makro nicht killen kann, müsste man die Anwendung welche vom Makro gestartet wurde und Excel neu gestartet werden. Um alles von Vorne beginnen zu können.
Wie meinst du das genau mit dem End? Das mit End müsste doch innerhalb des Makros passieren, oder?
Aber das reagiert ja im worst case nicht mehr!
Hmm... ganz schön tricky!
Anzeige
AW: Makro per code stoppen
14.09.2009 15:45:04
JogyB
Hi.
Ich tu mir immer noch ein wenig schwer damit zu verstehen, wie das alles abläuft...
Die Prozedur TimerProc wird ja immer noch ausgeführt, oder? (Wenn auch der Timer nicht mehr tut, dann ist ja sowieso alles vorbei, da ja dann gar kein Code mehr ausgeführt wird und Du somit auch keinerlei Einflussmöglichkeit mehr hast.) Wenn Du nun in diese Prozedur nun ein END (ohne alles, nur END) reinsetzt, das unter bestimmten Bedingungen ausgeführt wird, dann sollte dieses jeglichen Code beenden. Ob das natürlich noch geht, wenn an einer anderen Stelle der Code komplett hängt, ist wieder die andere Frage.
Wie führst Du denn diese andere Anwendung aus? Eigentlich sollte die andere Anwendung nicht zum "Hängen" von Excel führen...
Gruss, Jogy
Anzeige
AW: Makro per code stoppen
16.09.2009 08:52:30
Steve
Morgen Jogy,
in einer Schleife wird das Programm wird mittels Application.Open gestartet und als Parameter das zu startene Script übergeben.
Wenn nun aber an einerstelle das Testcript fehlschlägt, dann macht excel mit der nächsten Zeile auch nicht weiter. Das ist dann das Problem.
Wie scheint, bleibt mir aber nichts weite übrig als per Batch-File alles, auch Excel, zu beenden und neustarten zu lassen.
Gruß
Steve
AW: Makro per code stoppen
16.09.2009 09:08:33
JogyB
Hi.
hast Du mal versucht, das externe Programm über den Shell-Befehl zu starten? Dann arbeitet das völlig autonom von Excel und Du müßtest dann nur noch prüfen, ob es auch wirklich was macht.
Gruss, Jogy
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige