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

Errorhandler bei "Serienschaltung"

Errorhandler bei "Serienschaltung"
Florian
Hallo Excel-Freunde!
Habe ein eher organisatorisches Problem bzgl. eines Errorhandlers, den ich implemtieren will. Ausgangslage ist eine Serienschaltung mehrere Makros, dh. Makro 1 erzeugt eine Datei, die Basis ist für Makro 2. Makro 1 ruft dabei Makro 2 auf usw. Wie kann ich hier sinnvoll einen Errorhandler implementieren? Habe gelesen, dass es möglich ist, die sub-Routinen als Funktionen zu deklarieren, die dann jeweils einen Boolean-Wert an die aufrufende Makro zurückgeben (ob fehlerfrei durchgelaufen oder nicht), aber geht das auch bei Serienschaltung? Habe diesbzgl. nur eine verschachtelte Lsg gefunden (also 1. Makro ruft Funktion 1 auf, Funktion 1 wiederum Funtion 2) - das erscheint mir aber zu kompliziert und damit wieder fehleranfällig.
Ginge es, eine Steuermakro zu haben, die alle Sub-Makros (bzw. Funktionen) nacheinander selbst aufruft? Ziel sollte es sein, dass die ganze Serie immer durchläuft und nur warnt, dass z.B. Makro 3 fehlerhaft war und deshalb nur die Daten von Makro 3 veraltet sind (d.h. das z.B. Ergebnis des Vortages = alte von Makro 3 erzeugte Datei verwendet wurde).
Wisst Ihr da evt. weiter? Wäre echt super ;))
Gute Nacht!
Florian
AW: Errorhandler bei "Serienschaltung"
24.05.2010 01:24:10
{Boris}
Hi Florian,
das ist - zumindest für mich - ein wenig zu abstrakt.
Gib doch mal ein Dummy-Beispiel.
Grüße Boris
AW: Errorhandler bei "Serienschaltung"
24.05.2010 02:00:10
Oberschlumpf
Hi Florian
Deine Frage:
...Ginge es, eine Steuermakro zu haben, die alle Sub-Makros (bzw. Funktionen) nacheinander selbst aufruft?...
Ja, das geht. Meinst du vielleicht so?

Sub sbStart()
If fcMakro1 = False Then
MsgBox "Fehler in fcMakro1", vbExclamation
End
End If
If fcMakro2 = False Then
MsgBox "Fehler in fcMakro2", vbExclamation
End
End If
If fcMakro3 = False Then
MsgBox "Fehler in fcMakro3", vbExclamation
End
End If
End Sub

Function fcMakro1() As Boolean
On Error GoTo fehler
a = 5 * 5
MsgBox "Ergebnis: " & a, vbInformation, "fcMakro1"
fcMakro1 = True
fehler:
End Function

Function fcMakro2() As Boolean
On Error GoTo fehler
'die nächste Zeile auskommentieren und übernächste Zeile aktivieren,
'dann gibt es keinen Fehler
a = 5 / 0
'    a = 3 * 7
MsgBox "Ergebnis: " & a, vbInformation, "fcMakro2"
fcMakro2 = True
fehler:
End Function

Function fcMakro3() As Boolean
On Error GoTo fehler
a = 5 * 17
MsgBox "Ergebnis: " & a, vbInformation, "fcMakro3"
fcMakro3 = True
fehler:
End Function

Du startest das Makro sbStart.
Dieses Makro ruft dann nacheinander die Funktionen fcMakro1, fcMakro2 und fcMakro3 auf - aber nur, wenn in allen Funktionen kein Fehler produziert wird.
Kommt es doch zu einem Fehler, wie in fcMakro2 (Division durch 0), erscheint aus sbStart eine MsgBox mit Hinweis auf Fehler und in welcher Funktion/Makro der Fehler aufgetreten ist - das komplette Makro wird beendet.
Hilft das als Denkanstoß für dein Re-Organisieren deiner Makros?
Ciao
Thorsten
Anzeige
AW: Errorhandler bei "Serienschaltung"
24.05.2010 02:51:17
Florian
Hallo Thorsten!
Danke, das meinte ich. Sieht sehr gut aus, ich werds morgen mal testen. Hab ich denn, wenn ich alle Subs als Funktion laufen lasse, auch die Möglichkeit, die Makros noch zusätzlich einzeln aufzurufen (bzw. wie ruft man eine Fkt auf?)? Rufe jetzt alle Makros per Controllbutton auf, zusätzlich sind sie noch nach Uhrzeit bedingt in Serie geschalten (dh. z.B. ab 10h abends löst das Auslösen einer Makro die Kette aus, sonst nicht). Geht das auch damit?
Danke!
Gruss Florian
AW: Errorhandler bei "Serienschaltung"
24.05.2010 09:29:42
Oberschlumpf
Hi Florian
Hab ich denn, ...., auch die Möglichkeit, die Makros noch zusätzlich einzeln aufzurufen
Probier es doch einfach mal aus, bevor du fragst! ;-)
Aber ok, ich verrat es dir.
Ja, man kann Functions genau so mit einem CommandButton oder anderem Steuerelement aufrufen wie auch Subs.
Ich habe den Code ein wenig geändert:
Im Startmakro werden nun keine MsgBoxes mehr angezeigt, wenn Fehler auftreten.
Die Fehler-Meldungen kommen nun direkt aus den Functions.
Und ganz unten siehst du den Code aus einem CommandButton.
Es wird nur fcMakro1 gestartet. Genau so kannst du auch alle anderen Makros starten.
Hilfts?
Ciao
Thorsten
Sub sbStart()
fcMakro1
fcMakro2
fcMakro3
End Sub
Function fcMakro1() As Boolean
On Error GoTo fehler
a = 5 * 5
MsgBox "Ergebnis: " & a, vbInformation, "fcMakro1"
fcMakro1 = True
Exit Function
fehler:
MsgBox "Fehler in fcMakro1", vbExclamation
End
End Function
Function fcMakro2() As Boolean
On Error GoTo fehler
'die nächste Zeile auskommentieren und übernächste Zeile aktivieren,
'dann gibt es keinen Fehler
a = 5 / 0
'    a = 3 * 7
MsgBox "Ergebnis: " & a, vbInformation, "fcMakro2"
fcMakro2 = True
Exit Function
fehler:
MsgBox "Fehler in fcMakro2", vbExclamation
End
End Function
Function fcMakro3() As Boolean
On Error GoTo fehler
a = 5 * 17
MsgBox "Ergebnis: " & a, vbInformation, "fcMakro3"
fcMakro3 = True
Exit Function
fehler:
MsgBox "Fehler in fcMakro3", vbExclamation
End
End Function
Private Sub CommandButton1_Click()
fcMakro1
End Sub


Anzeige
AW: Errorhandler bei "Serienschaltung"
24.05.2010 10:16:33
Florian
Hi Thorsten!
Besten Dank! Eine Frage hab ich noch, im Bsp stoppt die Makro nach dem Aufrufen der (Fehler-)Funktion 2 - ist es auch möglich, nach der fehlerhaften Makro den Code weiter auszuführen (Ausführen von Funktion 3)?
Bsp: Ganze Kette wird ausgeführt, der Mitarbeiter wird durch einen Bericht informiert "Makro 1 + Makro 3 ausgeführt, Fehler in Makro 2"
Vielen Dank für die Hilfe!
AW: Errorhandler bei "Serienschaltung"
24.05.2010 11:09:02
Gerd
Hallo Florian,
habe rumgeflickt in "fcMakro2" (tolle Bezeichnung!); besser ist es, im Code Fehler durch Prüfungen zu vermeiden.
(Variablen sollte man stets deklarieren.)
Option Explicit
Dim a As Double
Sub sbStart()
Dim strMeldung As String
fcMakro1
strMeldung = fcMakro2
fcMakro3
If Len(strMeldung) Then MsgBox "fehler " & strMeldung, vbOKOnly, "Fehler in fcMakro2"
End Sub

Function fcMakro1() As Boolean
On Error GoTo fehler
a = 5 * 5
MsgBox "Ergebnis: " & a, vbInformation, "fcMakro1"
fcMakro1 = True
Exit Function
fehler:
MsgBox "Fehler in fcMakro1", vbExclamation
End
End Function

Function fcMakro2() As String
'die nächste Zeile auskommentieren und übernächste Zeile aktivieren,
'dann gibt es keinen Fehler
On Error GoTo fehler
a = 5 / 0
'    a = 3 * 7
fehler:
If Err.Number  0 Then fcMakro2 = Err.Description: Err.Clear
End Function

Function fcMakro3() As Boolean
On Error GoTo fehler
a = 5 * 17
MsgBox "Ergebnis: " & a, vbInformation, "fcMakro3"
fcMakro3 = True
Exit Function
fehler:
MsgBox "Fehler in fcMakro3", vbExclamation
End
End Function
Gruß Gerd
Anzeige
AW: Errorhandler bei "Serienschaltung"
24.05.2010 11:22:11
Oberschlumpf
Hi Gerd
hmm hmm...was "meckerste" denn rum?
Zitatauszug:
..."fcMakro2" (tolle Bezeichnung!)...
Florian wollte einen Denkanstoß zum Thema Error-Handling-Organisation.
Und ich hab ihm eine - grundsätzliche - Lösungsidee geboten....ein Grundgerüst sozusagen, auf dem er aufbauen kann.
Und für diesen Fall reicht es vollkommen aus, die Bezeichnungen Makro1,2 + 3 usw zu verwenden.
Und ja, du hast Recht...es ist besser, im Code Fehler durch Prüfungen zu vermeiden
Und trotzdem gilt:
Du glaubst gar nicht, wie viel Phantasie ein Anwender entwickeln kann, etwas falsch zu machen.
Ein Programmierer wird es nie schaffen, ALLE Fehler abfangen zu können.
Je komplexer ein Programm - desto mehr (Fehler)Möglichkeiten.
Sogar Microsoft verkauft seine Programme als "unfertig". Denn nicht umsonst "schieben" sie ServicePacks hinterher, die die Fehler abfangen, deren Existenz sie vorher gar nicht gekannt haben.
Und ich glaube mal, die Programmierer von MS ham n bissi mehr aufm Kasten.
Ciao
Thorsten
Anzeige
AW: Errorhandler bei "Serienschaltung"
24.05.2010 11:44:09
Gerd
Hi Thorsten,
"Makro" ist halt die Standardbezeichnung von Sub - Routinen.
Zur Fehlervermeidung habe ich einmal einen guten Spruch gelesen:
"Man kann ein Programm narrensicher machen. Aber absolut narrensicher geht nicht!"
Ich denke aber, dass sowas wie "die Datei vom Vortag erwischt hat" durchaus im Code abgeprüft werden kann.
MS Excel ist ein saustarkes Programm. Und manche kleine Unzulänglichkeit kann man auch noch ausnutzen. :-)
Gruß Gerd
AW: Errorhandler bei "Serienschaltung"
24.05.2010 11:09:29
Oberschlumpf
Hi
Schau dir diese Datei an:
https://www.herber.de/bbs/user/69702.xls
Nun laufen alle Makros durch.
Am Ende gibt’s ne Statusmeldung.
Nur bei Einzelaufruf eines Makros erscheint ne Fehlermeldung.
Detailierte Beschreibung im Code direkt.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Errorhandler bei "Serienschaltung"
24.05.2010 11:37:35
Florian
Super! Danke!! Genau das hab ich gesucht.
Aber: habe noch eine Herausforderung, an die ich so nicht gedacht habe: Habe in meinen Ablauf Fortschrittsbalken integriert, dh. die Makros werden über eine Userform aufgerufen. Dh. die Kette "Aufrufmakro - Funktion" wird für alle Submakros durch die Userform unterbrochen, also "Aufrufmakro - [Sub Userform - Activate Userform] - Funktion". Für normale Subprozeduren ohnen Rückmelung funktioniert das ja, aber geht das dann auch bei Funktionen? Brauchst Du evt. eine Bsp-Datei?
Gruss Florian
AW: Errorhandler bei "Serienschaltung"
24.05.2010 11:38:55
Oberschlumpf
ja, ich brauch ne Datei.
Ciao
Thorsten
Anzeige
AW: Errorhandler bei "Serienschaltung"
24.05.2010 13:56:26
Oberschlumpf
HI
Sorry, ich verstehe anhand der Erklärung in der Datei nicht, was du erreichen möchtest.
Und wozu benötigst du soooo viele Public-Variablen?
Ciao
Thorsten
AW: Errorhandler bei "Serienschaltung"
24.05.2010 15:22:35
Florian
Hi!
Sorry, die Variablen sind aus dem ursprünglichen Code (ca. 10 Makros in Serie), habe das Bsp vereinfacht... Die Variablen brauchst Du ja gar nicht ansehen.
Ziel ist es, den Errorhandler zu implementieren, und zwar zusammen mit der Progressbar. Die Progressbar führt ja dazu, dass die Subroutinen (später Funktionen) nicht direkt über die Steuermakro aufgerufen werden, sondern die Steuermakro zunächst die Userform aufruft, die wiederum die Subroutine (Funktion) aufruft. Wie aber kommt der Booleanwert "Fehler j/n" von der Funktion zur Steuermakro, wenn die Userform dazwischenliegt? Hoffe konnte es ein bisschen erklären, wenn noch unklar, frag einfach. Danke für Deine Hilfe!
Gruss
Florian
Anzeige
AW: Errorhandler bei "Serienschaltung"
24.05.2010 18:09:57
Oberschlumpf
Hi Florian
Hab nun die Fehlerbehandlung in deine Bsp-Datei eingebaut.
Guckst du hier:
https://www.herber.de/bbs/user/69711.xls
Wie gehabt, deine 2 Button, die jeweils Makro1 ODER Makro2 starten.
Ich habe noch n dritten Button eingebaut, der BEIDE Makros nacheinander startet.
Nur nach Ende meines Buttons erscheint eine Statusmeldung.
Nur nach Ende von deinem Button1 ODER 2 erscheint eine Fehlermeldung.
Habe in Makro1 einen Fehler eingebaut.
Hilfts denn?
Ciao
Thorsten
AW: Errorhandler bei "Serienschaltung"
24.05.2010 19:08:37
Florian
Super Thorsten, vielen Dank!
Muss es erst noch implementieren, evt. hab ich dann noch ne Frage...
Sieht aber sehr gut aus!
Gruss und schönen Feiertag noch!
Florian
Anzeige
Eine Frage noch Thorsten...
24.05.2010 19:52:38
Florian
Hi!
Habe noch eine Frage: was macht denn genau die Variable "pBoAlleMakros" im Code? Danke für die Hilfe!
Gruss Florian
pBoAlleMakros = True
Call UF01
Call UF02
pBoAlleMakros = False
AW: Eine Frage noch Thorsten...
24.05.2010 20:15:03
Oberschlumpf
Hi
Die Var macht gar nix! :-)
Ich hatte eine Idee, was sie hätte tun können.
Aber im Verlauf der restl. Programmierung vergaß ich die Idee wieder - und das Löschen der entsprechenden Codezeilen vergaß ich auch :-)
Nun kannst du alles löschen, was mit pboAlleMakros zusammenhängt.
Ciao
Thorsten
Noch ein Problem...
24.05.2010 22:15:47
Florian
Hallo Thorsten,
habe noch ein Problem, bin gerade dabei das einzubauen. Meine Makro öffnet u.a. nach einer Liste (ähnlich dem Bsp) Dateien, als Testfehler wollte ich nun eine Datei öffnen lassen, die nicht existiert (es kommt dann zum Runtime-Error 1004), da wirkt der Errorhandler nicht. Zum Test lies ich aber auch den "1/0-Fehler" laufen, der wird abgefangen. Weisst Du woran das liegt? Fehler ist doch Fehler, oder?
Danke vielmals, hast mir bereits sehr weitergeholfen!
Gruss Florian
Anzeige
AW: Noch ein Problem...
24.05.2010 23:00:06
Oberschlumpf
Hi Florian
Ohne Datei kann ich nicht sehen, was bei dir nicth funktioniert.
Zeig uns entweder deine Datei - und erkläre bitte Schritt für Schritt, was zum nicht erkennen des Fehlers führt, oder erstell eine weitere Bsp-Datei, in der der von dir beschriebene Fehler nicth erkannt wird.
Ciao
Thorsten
Fehler liegt woanders...
24.05.2010 23:01:56
Florian
Hi,
ich bins nochmal: vergiss den letzten Beitrag, eben hats funktioniert (hab auch beim Debuggen gesehen, dass es der Workbook.Open-Fehler war, den er erkannt hat). Aber irgendwo muss da noch ein Fehler sein (bei meinem Makro). Werds mal die nächsten Tage auschecken und frag Dich dann bestimmt nochmal...
Schönen Gruss
Florian
On error goto 0...
24.05.2010 23:47:51
Florian
Hi!
Spitze, habs raus: Fehler lag darin, dass im Code (meiner Makro) ein On Error Resume Next verbunden mit On Error GoTo 0 war - deshalb wurde der Fehler nicht vom Errorhandler nicht erkannt. Müsste passen jetzt! Danke und gute Nacht!
Florian

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige