Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1272to1276
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

Macro durch anderes macro stoppen

Macro durch anderes macro stoppen
Fettertiger
Hallo liebe Experten,
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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Application.OnTime : Verwende Variable Startzeit
16.08.2012 18:02:28
NoNet
Hallo Theo,
Du hast zwar im Code eine Variable Startzeit definiert, aber Du verwendest sie ja nirgends ;-)
Hier ein einfaches Codebeispiel, wie man diese verwenden kann :
Public Startzeit 'Variable GLOBAL/öffentlich definieren
Sub Starten()
Startzeit = Now + TimeSerial(0, 1, 0) 'Aktuelle Zeit + 1 Min.
Application.OnTime Startzeit, "Meldung"
End Sub
Sub meldung()
MsgBox "Die nächste Meldung erfolgt 10 Sekunden " & _
"nachdem OK gedrückt wurde ", vbOKOnly, "Meldung"
Startzeit = Now + TimeSerial(0, 0, 10) 'Aktuelle Zeit + 10 Sekunden
Application.OnTime Startzeit, "Meldung"
End Sub
Sub Beenden()
Application.OnTime Startzeit, "Meldung", , schedule:=False
End Sub
Gruß, NoNet

http://www.exceltreffen.de/index.php?page=224
Anzeige
AW: Application.OnTime : Verwende Variable Startzeit
17.08.2012 12:33:54
Fettertiger
Hallo Nonet,
ich wusste das meine Startzeit nur zu Verwirrung führen würde. Die Startzeit würde in meinem echten Macro nur dazu verwendet in SAP verschiedene Sachen die jeweils 20 Sekunden dauern zu überwachen. Der Einfachheithalber hab ich das jetzt im Beispiel durch eine Boolsche Variable ersetzt, denn ich weis leider immer noch nicht wie ich das laufende macro "abschiessen" kann.
Public SAP_arbeitet as Boolean
Sub Mastermacro()
pplication.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
SAP_Arbeitet=true
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
SAP_Arbeitet=false
End Sub
Sub AllesAus()
If SAP_Arbeitet = true then
'WAS MUSS HIER REIN UM DAS ANDERE MACRO ZU BEENDEN?
end if
End Sub

Gruss
Theo
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige