Macro durch anderes macro stoppen
Fettertiger
in meiner Anwendung ruft ein Makro ein anderes Makro auf, welches eine externe Anwendung (SAP) steuert.
Das funktioniert normalerweise auch absolut problemlos. Leider kommt es manchmal (z.b durch langsame VPN Verbindung vor, dass die externe Anwendung zu lange auf sich warten lässt (vermutlich bis zum sankt nimmerleinstag) und mein macro schön brav darauf wartet den nächsten Schrittt tun zu dürfen - jedenfalls solange bis ich dann im taskmanager die externe Anwendung kille :-).
Da die Schritte in SAP normalerweise in maximal 20 sekunden erledigt sein sollten, würde ich gerne - falls das macro nicht bis zum ende gekommen ist, das laufende macro abbrechen.
Ich habe die macros mal schematisch dargestellt (die Syntax also nicht geprüft) - wie das ganze z.B über Application.Ontime ausssehen könnte. Trotzdem fehlt mir der entscheidende Teil im "AllesAus" Makro. "END" kommt wohl nicht in Frage, weil sonst mein Eventhandling ausgeschaltet bleibt.
Public Startzeit as date
Sub Mastermacro()
Startzeit=now
Application.enableevents=false
Application.OnTime EarliestTime:=Now + TimeValue("00:01:00"), Procedure:="AllesAus", Schedule:= _
False
SAPStart
Msgbox("Fertig")
Application.enableevents=true
End Sub
Sub SAPStart()
Dim SAPguiAPP, Connection, Session, wshell As Object
Set wshell = CreateObject("WScript.Shell")
Dim bWindowFound As Boolean
Dim count As Integer
On Error Resume Next
If Not IsObject(SAPguiAPP) Then
Set SAPguiAPP = CreateObject("Sapgui.ScriptingCtrl.1")
End If
If Not IsObject(Connection) Then
Set Connection = SAPguiAPP.OpenConnection(System, True)
Call confirmSkriptOpenMessage
If Err.Number = 70 Then Exit Sub
confirmSkriptOpenMessage
End If
If Not IsObject(Session) Then
Set Session = Connection.Children(0)
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nme12"
session.findById("wnd[0]").sendVKey 0
'mach alles mögliche mit SAP
'bis das macro fertig ist
Startzeit=0
End Sub
Sub AllesAus()
If Startzeit 0 then
'WAS MUSS HIER REIN?
else
'timer für die nächste anwendung starten
Application.OnTime EarliestTime:=Now + TimeValue("00:01:00"), Procedure:="AllesAus", _
Schedule:=False
end if
End Sub
Hat jemand eine Idee? Vielen Dank im Voraus für Eure Hilfe!Gruss
Theo