Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - Nach fehler Makro neustarten

VBA - Nach fehler Makro neustarten
Daniel
Hallo Forum,
ich habe hier eine Datei mit einem Makro, welches mir werte aus dateien ausliest und in dateien schreibt. (Danke Beverly/Karin für die kompetente Hilfe)
Das Ganze funktioniert soweit gut, nur das auch noch ein weiteres Batch Programm im selben Intervallen auf die Dateien zugriff hat und somit (wie der Zufall kommt) für eine Sekunde die datei von der Batch (Netcat) geöffnet ist und das Makro dann keinen zugriff hat - Die quittung ist eine Fehlermeldung (irgendwas mit einlesen hinter dateiende) und der Abbruch des Makros.
Ich würde jetzt gerne, dass das Makro bei diesem Fehler wieder von vorne anfängt und evtl. die Fehlermeldung vertuscht.
ist das möglich?
vielen Dank
mfg
Daniel
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
VBA - Nach fehler Makro neustarten
02.09.2009 16:16:02
Alfons
Hallo Daniel,
ruf das Makro in der Fehlerbehandlung nochmal auf:
Private Sub VonVorn()
Dim i As Integer, Antwort As Integer
On Error GoTo Hell
i = 10 / 0
Exit Sub
Hell:
'MsgBox "FehlerNr.: " & Err.Number & vbNewLine & vbNewLine & _
"Beschreibung: " & Err.Description, vbCritical, "Fehler"
Antwort = MsgBox("Makro neu starten?", vbYesNoCancel, "")
If Antwort = 6 Then
Call VonVorn
End If
End Sub
Gruß
Alfons
http://vba1.de
Anzeige
AW: VBA - Nach fehler Makro neustarten
02.09.2009 17:03:24
fcs
Hallo Daniel,
in diese Fehlerbehandlung muss du etwas mehr investieren. Sie ist nicht trivial, denn der Fehler schlägt evtl. auf die Dateiverwaltung in Excel durch. Der Fehler tritt wie du schon erkannt hast auf wenn Excel auf die durch das andere Programm geöffnete Datei zugreifen will.
Die Fehlerbehandlung sollte alle bereits geöffneten Datenkanäle schließen und dann zur Hauptprozedur zurückkehren. Dann wird 10 Sekunden Später das Zeitmakro wieder ausgeführt. Mangels Testmasse alles ohne Gewähr.
Evtl. macht es auch Sinn einen FehlerMerker in eine Variable zu schreiben und danach den Start des Zeitmakros etwas zu versetzen, damit die beiden Programm nicht gleichzeitig auf die Datei(en) zugreifen.
Gruß
Franz
Sub Ausfuehren()
Dim strAusgang As String
On Error GoTo Fehler
Dim Fso
Dim fsoDatei
Open "C:\Test\Test.txt" For Input As #1
Input #1, strAusgang
Close
With Worksheets("Tabelle1")
.Range("B3") = CDbl(strAusgang)
Set Fso = CreateObject("Scripting.FileSystemObject")
Set fsoDatei = Fso.OpenTextFile("C:\Test\Text2.txt", 2, True)
fsoDatei.Write .Range("D17")
fsoDatei.Close
End With
Fehler:
With Err
If .Number  0 Then
If .Number = 9999 Then 'diese Fehler-Nummer nach dem 1. Auftreten des Fehlers anpassen
.Clear
Close
If Not fsoDatei Is Nothing Then fsoDatei.Close
Else
MsgBox "Fehler-Nr. " & .Number & vbLf & .Description & vbLf & .HelpContext
End If
End With
Set Fso = Nothing
Set fsoDatei = Nothing
End Sub

Anzeige
AW: VBA - Nach fehler Makro neustarten
03.09.2009 10:33:38
Daniel
Danke für eure Antworten,
es ist anscheinend deutlich komplizierter, da das Programm bzw. die Tatsache, welche das Problem verursacht eh mehr schlecht als recht funktioniert...ich denke ich muss mir einen anderen Weg suchen.
Trotzdem Danke für eure Antworten - klasse Support.
mfG
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Makro nach Fehler neu starten


Schritt-für-Schritt-Anleitung

  1. Fehlerbehandlung einrichten: Du musst eine Fehlerbehandlung in deinem VBA-Makro implementieren. Verwende die On Error-Anweisung, um Fehler abzufangen.

    On Error GoTo Fehler
  2. Fehlerfall definieren: Lege fest, was passieren soll, wenn ein Fehler auftritt. Du kannst zum Beispiel eine Meldung anzeigen und den Benutzer fragen, ob das Makro neu gestartet werden soll.

    Fehler:
    MsgBox "Ein Fehler ist aufgetreten."
  3. Makro neu starten: Wenn der Benutzer zustimmt, dass das Makro neu gestartet werden soll, rufst du die Hauptprozedur erneut auf.

    Antwort = MsgBox("Makro neu starten?", vbYesNo)
    If Antwort = vbYes Then
       Call Hauptprozedur
    End If
  4. Wartezeit einfügen: Um Konflikte mit anderen Programmen zu vermeiden, füge eine Wartezeit von einigen Sekunden ein, bevor das Makro erneut ausgeführt wird.

    Application.Wait (Now + TimeValue("0:00:10")) ' 10 Sekunden warten

Häufige Fehler und Lösungen

  • Fehler beim Dateizugriff: Wenn das Makro auf eine Datei zugreifen möchte, die von einem anderen Programm geöffnet ist, tritt ein Fehler auf. Um dies zu vermeiden, implementiere eine Überprüfung, ob die Datei geöffnet ist, oder schließe vorher alle offenen Datenkanäle.

  • Fehlermeldungen unterdrücken: Wenn du die Fehlermeldungen nicht anzeigen möchtest, kannst du die MsgBox-Anweisung in der Fehlerbehandlung auskommentieren oder löschen.


Alternative Methoden

Statt das Makro direkt neu zu starten, kannst du auch eine Schleife verwenden, die die Ausführung des Makros wiederholt, bis es erfolgreich abgeschlossen wird. Dies kann durch eine Do While-Schleife erreicht werden.

Dim success As Boolean
success = False
Do While Not success
    On Error GoTo Fehler
    ' Hauptcode hier
    success = True
Loop

Praktische Beispiele

Hier ist ein einfaches Beispiel, das die oben genannten Konzepte kombiniert:

Sub Hauptprozedur()
    On Error GoTo Fehler
    ' Beispielcode
    Dim strAusgang As String
    Open "C:\Test\Test.txt" For Input As #1
    Input #1, strAusgang
    Close
    ' Weitere Verarbeitung...
    Exit Sub
Fehler:
    MsgBox "Ein Fehler ist aufgetreten. Möchtest du das Makro neu starten?"
    Antwort = MsgBox("Ja oder Nein?", vbYesNo)
    If Antwort = vbYes Then
        Call Hauptprozedur
    End If
End Sub

Tipps für Profis

  • Verwende Try...Catch: In neueren Versionen von VBA gibt es Möglichkeiten, die Fehlerbehandlung zu optimieren. Nutze Try...Catch-Strukturen, um spezifische Fehler besser zu handhaben.

  • Dokumentation: Halte deine Makros gut dokumentiert, damit du später nachvollziehen kannst, welche Fehlerbehandlungen implementiert wurden.

  • Regelmäßige Tests: Teste dein Makro regelmäßig, besonders wenn du Änderungen vornimmst. So kannst du sicherstellen, dass die vba fehlerbehandlung immer zuverlässig funktioniert.


FAQ: Häufige Fragen

1. Wie kann ich verhindern, dass das Makro bei jedem Fehler abbricht? Du kannst die Fehlerbehandlung mit On Error GoTo einrichten, um sicherzustellen, dass das Makro bei einem Fehler nicht einfach abbricht.

2. Was mache ich, wenn das Makro trotz Fehlerbehandlung nicht mehr reagiert? In diesem Fall solltest du prüfen, ob alle Datenkanäle korrekt geschlossen werden. Möglicherweise verursacht ein anderer Prozess (z. B. ein Batch-Programm) den Zugriff auf die Datei, was zu einem Konflikt führt. Stelle sicher, dass dein Makro genügend Zeit hat, um auf die Datei zuzugreifen, ohne dass andere Programme gleichzeitig darauf zugreifen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige