Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Timeout für Funktion

Forumthread: Timeout für Funktion

Timeout für Funktion
27.05.2014 13:39:42
Theo

Hallo liebe Experten,
ich habe eine Funktion die bestimmte Daten in SAP pflegt (und natürlich einen Rückgabewert liefert). Blöderweise bleibt eine bestimmte SAP Transaktion manchmal hängen, so dass die VBA-Funktion bis zum Sankt-Nimmerleinstag darauf wartet, dass SAP endlich mal in die Pötte kommt. Am liebsten wäre mir eine Art timeout Funktion zu implementieren. Die Funktion sollte einfach abgebrochen werden - oder von mir aus an eine bestimmte Stelle innerhalb der Funktion gesprungen werden, falls die Funktion mehr als fünf Sekunden braucht.
DummyCode mässig sieht die Funktion so aus:
Funktion SchreibwasinSAP as Boolean
Dim TimeOutTime As Double
TimeOutTime = Now + TimeValue("0:0:5")
Ontimeout go to TimeOut '=Ist natürlich nur DummyCode
' jetzt mach das ganze Zeug in SAP
SchreibwasinSAP = TRUE
exit function
Timeout:
ErrorStr=ErrStr & "TimeOut "& Material &", "
end function
Hat jemand eine Idee, wie man das hinbekommt?
Danke und Gruss
Theo

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Timeout für Funktion
28.05.2014 09:06:43
Nepumuk
Hallo,
das geht nicht, denn Excel / VBA ist nicht Multitasking-fähig. Sprich du kannst, wenn ein VBA-Programm läuft, kein anderes Makro starten. Das geht also nur "von außen" (externes Programm). Aber Excel ist, so lange es auf eine Antwort von SAP wartet, nicht in der Lage eine Antwort zu geben. Ok, das könnte auch als Antwort aufgefasst werden, aber dein Programm "außerhalb" wartet in dem Fall auf eine Antwort von Excel und zwar so lange wie dieses auf eine Antwort von SAP wartet. Anders als VBA, kannst du aber z.B. in VB einen TimeOut vorgeben ab dem das Warten auf eine Antwort abgebrochen werden soll. Zumindest in VB6.0 gab es das. Siehe: http://support.microsoft.com/kb/138066/de ob es das in VB.net auch gibt kann ich nicht sagen, da habe ich zu wenig Erfahrung mit der Sprache.
Gruß
Nepumuk

Anzeige
;
Anzeige

Infobox / Tutorial

Implementierung einer Timeout-Funktion in VBA


Schritt-für-Schritt-Anleitung

Um eine vba timeout-Funktion in Excel zu implementieren, die eine bestimmte Zeit für den Abschluss einer Aktion festlegt, kannst du folgende Schritte ausführen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Editor zu öffnen.
  2. Neue Funktion erstellen: Füge eine neue Funktion in ein Modul ein.
  3. Timeout-Logik hinzufügen: Nutze die OnTime-Methode, um einen Timeout festzulegen.

Hier ist ein Beispielcode, der die oben beschriebene Logik umsetzt:

Function SchreibwasinSAP() As Boolean
    Dim TimeOutTime As Double
    TimeOutTime = Now + TimeValue("0:0:5")  ' Setze Timeout auf 5 Sekunden
    On Error GoTo Timeout

    ' Simuliere den SAP-Aufruf (hier sollte dein SAP-Code stehen)
    Application.OnTime TimeOutTime, "TimeoutHandler"

    ' Dein SAP-Code
    SchreibwasinSAP = True
    Exit Function

Timeout:
    SchreibwasinSAP = False
    MsgBox "Timeout erreicht!"
End Function

Sub TimeoutHandler()
    ' Hier kannst du den Code hinzufügen, der beim Timeout ausgeführt werden soll
    MsgBox "Die Funktion hat zu lange gedauert."
End Sub

Häufige Fehler und Lösungen

  • Problem: Die Funktion wird nicht abgebrochen.

    • Lösung: Stelle sicher, dass du die OnTime-Methode innerhalb deiner Funktion korrekt verwendest und dass der Timeout-Handler richtig definiert ist.
  • Problem: Fehlermeldungen während des SAP-Aufrufs.

    • Lösung: Überprüfe deinen SAP-Code auf mögliche Fehler und stelle sicher, dass du Fehlerbehandlungsroutinen in deinem VBA-Code implementierst.

Alternative Methoden

Eine Möglichkeit, das excel vba timeout-Problem zu umgehen, besteht darin, die Funktion in einem separaten Thread auszuführen. Dies kann durch die Verwendung von externen Programmen oder Bibliotheken realisiert werden. VBA selbst unterstützt kein echtes Multitasking, aber du kannst mit .NET oder durch die Verwendung von Windows-API-Funktionen arbeiten.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie du eine Timeout-Funktion in einem realen Szenario einsetzen kannst:

Function UpdateSAPData() As Boolean
    Dim TimeOutTime As Double
    TimeOutTime = Now + TimeValue("0:0:10")  ' Setze Timeout auf 10 Sekunden
    On Error GoTo Timeout

    Application.OnTime TimeOutTime, "TimeoutHandler"

    ' Simuliere einen SAP-Datenupdate
    ' Hier dein SAP-Datenupdate-Code

    UpdateSAPData = True
    Exit Function

Timeout:
    UpdateSAPData = False
    MsgBox "Das Update hat zu lange gedauert."
End Function

Sub TimeoutHandler()
    MsgBox "Timeout beim Aktualisieren der SAP-Daten!"
End Sub

Tipps für Profis

  • Verwende die DoEvents-Funktion, um die Benutzeroberfläche während langer Prozesse nicht einfrieren zu lassen.
  • Implementiere eine benutzerfreundliche Fehlermeldung, die dem Nutzer erklärt, was passiert ist, wenn ein Timeout auftritt.
  • Überlege, ob du die Timeout-Dauer anpassbar machen möchtest, um sie bei Bedarf zu ändern.

FAQ: Häufige Fragen

1. Kann ich den Timeout-Wert dynamisch ändern?
Ja, du kannst den Timeout-Wert in einer Variablen speichern und vor dem Aufruf der Funktion ändern.

2. Welche Excel-Version benötige ich für diese Funktion?
Diese Funktion sollte in allen modernen Excel-Versionen funktionieren, die VBA unterstützen (Excel 2007 und höher).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige