Office: (Office 2010) Fehler in Fehlerbehandlung

Helfe beim Thema Fehler in Fehlerbehandlung in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, ich hab es nochmals angepasst. Der Excel-Part wurde in ein separates Modul geschrieben und als Funktion abgehandelt. Code: Public Function... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Forza SGD, 27. Juli 2015.

  1. Fehler in Fehlerbehandlung


    Hallo,

    ich hab es nochmals angepasst. Der Excel-Part wurde in ein separates Modul geschrieben und als Funktion abgehandelt.

    Code:
    Der Aufruf in der Hauptroutine geschieht wie folgt. Die Funktion liefert bei erfolgreichem Abschluss der Arbeiten in der Excel-Instanz der Wert True zurück, was die Fortsetzung der Routine bedeutet. Bei False wird die Routine abgebrochen.

    Code:
    Ich hoffe damit unabhängig vom Zeitpunkt des auftretenden Fehlers alles (zumindest das meiste) sauber zu beenden.

    An dieser Stelle nochmals besten Dank an Josef und seine hilfreichen Anmerkungen und Verbesserungsvorschläge.

    Gibt's hierzu noch Ergänzungen bzw. Verbesserungsvorschläge?
     
    Forza SGD, 4. August 2015
    #16
  2. Hallo!

    Ich bin ein Freund von lesbarem Code. *wink.gif*

    Stell dir vor, du kennst den Inhalt der Prozedur "Excel_Instanz" nicht.
    Was passiert in dieser Zeile?

    Wird da eine Excel-Instanz erzeugt?

    Code-"Schönheitsfehler":
    Err.Nummer ist eine Zahl =>
    Code:
    Code:
    Muss unbedingt über die Zwischenablage kopiert werden?
    Ein direktes Zuweisen ist nicht möglich?

    Irgendwie so:
    Code:
    mfg
    Josef
     
    Josef P., 4. August 2015
    #17
  3. Nachtrag:

    Ich führte ein Refactoring von deinem Code aus Beitrag #16 durch.
    Der Code ist ungetestet, ich übernahm deinen Code, strukturierte ihn etwas anders und fügte die Änderung bezüglich Werte kopieren ein.
    Code:
    mfg
    Josef
     
    Josef P., 4. August 2015
    #18
  4. Fehler in Fehlerbehandlung

    Hallo Josef,

    Danke für die schnelle und umfangreiche Rückmeldung. Ich werde mir deine Optimierung anschauen und aller Wahrscheinlichkeit nach auch umsetzen. Wird heute wohl nichts mehr werden.

    Vielen lieben Dank! *top
     
    Forza SGD, 4. August 2015
    #19
  5. Hallo Josef,

    vielen Dank das von Dir vorgenommene Refactoring. Ich habe Deine Vorschläge soweit mit marginalen Veränderungen umgesetzt.


    ExportExcelFileToCsv:

    Code:
    FindSourceRangeInWorkBook:

    Code:
    ExportRangeToCsv:

    Code:
    Die Select Case - Anweisung habe ich entfernt. Zwar sah jene recht dürftig aus, doch erfüllte diese folgenden Zweck. Im Falle eines Fehlers im Bereich Exit_Function der Funktion ExportExcelFileToCsv: sollte ein Abbruch herbeigeführt werden, da sich ansonsten die Anwendung in einem Zirkelbezug verirren würde. In der von Dir vorgeschlagenen Variante werden Fehler in diesem Bereich ignoriert, was generell nicht schlimm ist, da die Objektreferenzen der Excel-Instanz sowie die Instanz selbst beim beenden der Hauptroutine zerstört werden und der folgende Code abgearbeitet werden kann. Allerdings könnte ein nicht bearbeiten der Code-Zeile SourceWkb.Close SaveChanges:=False zu Irritationen beim Nutzer führen. Da beim manuellen öffnen der Vorlage-Liste die Speicherabfrage erfolgen würde. Das es zu Fehlern an dieser Stelle kommt ist sicherlich recht unwahrscheinlich. Ich bin mir allerdings nicht sicher ob ich dies in kauf nehmen oder ignorieren sollte.

    In der Funktion FindSourceRangeInWorkBook sind per se keine Fehler zu erwarten und der Fall eines leeren Worksheets wurde ja bereits von Dir behandelt.

    Wie gesagt alles in allem entspricht dies Deinem Vorschlag. Lediglich die fehlerausgaben in den einzelnen Funktionen habe ich ergänzt, sowie das Schließen aller Objektreferenzen der Excel-Instanz. In der Hauptroutine wird generell noch im falle eines Abbruchs eine Information abgesetzt.

    Code:
    Nochmals besten Dank für deine umfangreiche Hilfe. Würdest Du es jetzt so stehen lassen?

    Gruß

    Andreas
     
    Forza SGD, 5. August 2015
    #20
  6. Hallo!

    Bezüglich Fehlermeldung in Prozeduren (z. B. ExportRangeToCsv), die nicht direkt vom User aufgerufen werden:

    Im Prinzip gibst du über den Rückgabewert der aufrufenden Prozedur bekannt, ob die Prozedur ordnungsgemäß durchgeführt wurde.
    (Das habe ich im letzten Refactoring so gelassen.)

    Ich vermeide in solchen Prozeduren eine Msgbox mit einer Fehlermeldung anzuzeigen, da das meiner Meinung nach die Aufgabe der aufrufenden Prozedur ist.
    Ich würde den Fehler abfangen und einen eigenen Fehler mit einer verständlichen Fehlermeldung auslösen.
    Dieser Fehler wird dann in der aufrufenden Prozedur (oder noch weiter oben, falls die aufrufende Prozedur keine Fehlerbehandlung hat) abgefangen und weiterverarbeitet. In der obersten Aufrufhierarchie kommt dann die Msgbox zum Einsatz.

    Mögliche Änderungen:
    FindSourceRangeInWorkBook
    Fehlerbehandlung entfernen (Fehler-Info für unerwartete Fehler ist auch weiter oben in der Aufrufhierarchie bekannt.)
    Das Nothing-Setzen der Variablen in dieser Prozedur ist kein muss, die sind sowie weg, wenn die Prozedur (auch im Fehlerfall) verlassen wird.


    ExportRangeToCsv
    Hier wird eine Fehlerbehandlung benötigt, um das Schließen vom TempWkb sicherzustellen.

    ExportExcelFileToCsv
    "Fehler"-Msgbox auf Err.Raise umstellen.

    Aufrufende Prozedur
    Goto-Anweisung entfernen und ebenso auf Err.Raise inkl. Fehlerbehandlung umstellen.


    Ob diese Änderung gewünscht ist, hängt vom Programmierstil ab. *wink.gif*
    Vorteil dieses Konzeptes: man kann als Programmierer die FUnktionen auf verwenden, ohne eine Meldung zu bekommen, wenn man die Fehler aus diesen Prozeduren wie gewünscht behandelt.


    => Dein Code abgeändert mit Err.Raise:
    Code:
    mfg
    Josef
     
    Josef P., 5. August 2015
    #21
  7. Hallo Josef,

    ich sehe mich genötigt mich zu rechtfertigen *Smilie Die Fehlermeldungen in den Unterfunktionen hatte ich eingefügt um gezielt den Ort der Fehlerentstehung zurückzumelden (auch wenn dies derzeit noch nicht im den etwaigen MSG-Boxen so hinterlegt war), verbunden mit der Hoffnung Fehler, welche Anwender melden besser eingrenzen zu können und nachzuvollziehen.

    dafür gibt es sicherlich elegantere Lösungen. Ich hab mich schon einmal in die Raise-Methode eingelesen *Smilie Morgen schaue ich mir Deine Verbesserungsvorschläge an.

    Vielen lieben Dank. Ich wünsche einen schönen Abend.

    gruß

    Andreas
     
    Forza SGD, 5. August 2015
    #22
  8. Fehler in Fehlerbehandlung

    Hallo!

    Das kannst du auch mit Err.Raise und dem Source-Parameter umsetzen. *wink.gif*

    Die Err.Raise-Variante hat noch einen Vorteil: man kann die Prozeduren in einem Unit-Test laufen lassen, da in einem Unit-Test die Fehler ohne Probleme auswertbar sind. Eine angezeigte MsgBox im Client ist allerdings aus Unit-Test-Sicht schwer auswertbar.

    Eines vergaß ich im letzen Code:
    Code:
    VBE.ActiveVBProject.Name würde ich im "Echt-Code" einer Anwendung durch eine globale Konstante ersetzen, damit sichergestellt ist, dass es keine Probleme mit der Erkennung der Auswertung von VBE.ActiveVBProject geben kann.

    mfg
    Josef
     
    Josef P., 5. August 2015
    #23
  9. Hallo Josef,

    anbei eine überarbeitete Fassung. Ich habe einige Kleinigkeiten geändert. Die Funktion ExportExcelFileToCsv habe ich wieder in eine Prozedur gewandelt. Durch die Verwendung von Err.Raise ist die Rückgabe eines booleschen Wertes zur Prüfung eines erfolgreichen Durchlaufs nicht mehr nötig. Sollte ich mich irren, korrigiere mich bitte.

    Ich hoffe ich wirke jetzt nicht beratungsresistent. Ich habe dennoch eine Fehlerbehandlung eingefügt. Auch wenn das Nothing-Setzen der Variablen überflüssig ist, so schadet es doch auch nicht *Smilie

    Aufruf in der Hauptprozedur:

    Code:
    Modul - ExportExcelToCsv:

    Code:
    Ich hoffe auf einem guten Weg zu sein. Vielen lieben Dank für die Hilfe.
     
    Forza SGD, 7. August 2015
    #24
  10. Hallo!

    Stimmt, die Rückgabe von True/False ist nicht mehr erforderlich, da im Fehlerfall sowie der Fehler in der aufrufenden Prozedur landet.


    FindSourceRangeInWorkBook:
    Solange die Fehlerbehandlung den Fehler nach oben weitergibt, schadet sie in Unterprozeduren nicht. ;-)

    mfg
    Josef
     
    Josef P., 7. August 2015
    #25
  11. Meiner Meinung nach sollte dies geschehen. Produziert die Funktion FindSourceRangeInWorkBook einen Fehler wird dieser dokumentiert und im Folgenden wird zum Error-Handler der Prozedur ExportExcelFileToCsv gesprungen.
     
    Forza SGD, 7. August 2015
    #26
  12. Ein Frage bleibt noch ...

    Code:
    Wann könnte denn in meiner Prozedur ein solcher Fall erfüllt sein? Würde es nicht ausreichen an Stelle der Err.Source stetig den Prozedur- bzw. Funktions-Namen anzugeben?

    Was könnten das für Probleme sein? So wie ich dies verstanden habe wird, auch hier im Forum, von der Verwendung Globaler Variablen abgeraten, insofern dies zu vermeiden ist.

    OT: Die Variante mit den Prozeduren RaiseErrorAndCleanUp sowie CloseWorkbookAndDispose finde ich sehr gelungen, da zu jeder Zeit bei auftretenden Fehlern die Prozedur sauber verlassen wird. Dies wollte ich nochmals erwähnen, da diese Problematik ursprünglich mal Auslöser dieses Diskussionsbeitrags war.

    *top
     
    Forza SGD, 7. August 2015
    #27
  13. Fehler in Fehlerbehandlung

    Hallo!

    Eine globale Konstante ist keine globale Variable. ;-)

    Code:
    Die Standard-Source, wenn der Fehler durch eine VBA-Funktion ausgelöst ist, ist der VB-Projekt-Name. Der ist nicht sehr hilfreich bei der Suche nach dem Fehler => Prozedurnamen einfügen.
    Sobald aber einmal ein passender Name vergeben wurde, sollte der nicht noch einmal überschrieben werden.

    Beispiel:
    Code:
    Gute Alternative zu
    Code:
    Den Fehlerentstehungs-"Pfad" anzeigen:
    Code:
    mfg
    Josef
     
    Josef P., 7. August 2015
    #28
  14. Hallo Josef,

    Ein klassischer Fall von DUMM - Konstanten sind keine Variablen, verstehe *Smilie

    Des Weiteren vielen Dank für dein ausführlichen Beispiel. Ich versuche mich einmal herauszureden. Es sind gefühlte 50 Grad in meinem Büro, was ich mal als Anlass nehme meine geistige Trägheit zu rechtfertigen ... Aber! Ich habe es nun verstanden ...

    Danke für Deine Geduld.
     
    Forza SGD, 7. August 2015
    #29
  15. Hallo Josef,

    ich hoffe Du hattest ein entspanntes Wochenende. es gab doch noch ein Problem, von welchem ich berichten möchte. Der Übertrag der SourceRange auf die TargetRange führte dazu, dass das beim Textfeld Postleitzahl die führende Null gestrichen wurde, sprich Excel den zu übertragenden Wert als Zahl interpretiert hat. Da die Variante mittels des Zwischenspeichers nicht mehr bemüht werden sollte, habe ich die TargetRange in der Subroutine ExportRangeToCsv vorformatiert. Dies führte zum gewünschten Ergebnis. Kann ich dies so stehen lassen, oder sind auch hier Probleme zu erwarten?

    Code:
     
    Forza SGD, 9. August 2015
    #30
Thema:

Fehler in Fehlerbehandlung

Die Seite wird geladen...
  1. Fehler in Fehlerbehandlung - Similar Threads - Fehler Fehlerbehandlung

  2. Fehler (0x800CCC78) beim Ausführen der Aufgabe "xx.yyyy@kabelmail.de - Nachrichten werden gesendet"

    in Microsoft Outlook Hilfe
    Fehler (0x800CCC78) beim Ausführen der Aufgabe "xx.yyyy@kabelmail.de - Nachrichten werden gesendet": Bei mir taucht im Outlook ständig folgender Fehler auf: (0x800CCC78) beim Ausführen der Aufgabe "xx.yyyy@kabelmail.de - Nachrichten werden gesendet": "Die Nachricht kann nicht gesendet werden....
  3. Fehler beim SVERWEIS Vermeidbar?

    in Microsoft Excel Hilfe
    Fehler beim SVERWEIS Vermeidbar?: Hallo, ich habe eine Tabelle mit SVERWEIS. Der erste Tab ist quasi eine Übersicht nach Jahren und dann die weiteren Tabs die Eingaben in den Jahren (Artikel, Bestand, Einkaufspreis usw). Die...
  4. Installation schlägt fehl - Fehler in OfficeClickToRun.exe

    in Sonstiges
    Installation schlägt fehl - Fehler in OfficeClickToRun.exe: Hallo, ich habe ein Problem beim Installieren von Office Ich erhalte die folgende Fehlermeldung: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ OfficeClickToRun.exe - Anwendungsfehler Die Anwendung...
  5. Bei meinem Outlook (new) fehlen wichtige Funktionen!

    in Microsoft Outlook Hilfe
    Bei meinem Outlook (new) fehlen wichtige Funktionen!: Hallo, wie der Titel bereits andeutet, habe ich Probleme mit Outlook. Zum Beispiel ist es mir nicht möglich, Add-ins zu installieren. Es gibt keinen Button dafür, und auch wenn ich über die...
  6. Ständige Passwortabfrage und Kalendersyncronisations Fehler

    in Microsoft Outlook Hilfe
    Ständige Passwortabfrage und Kalendersyncronisations Fehler: Guten Tag, ich bin neu in diesem Forum und hoffe nach vergeblicher Suche im Microsoft Forum hier Hilfe zu bekommen. Nach einem Wechsel von Win 10 auf 11 Anfang dieses Jahres habe ich folgende 2...
  7. Formel mit INDEX, MATCH und MAX gibt Fehler #NAME!

    in Microsoft Excel Hilfe
    Formel mit INDEX, MATCH und MAX gibt Fehler #NAME!: Hallo zusammen, ich habe mit Hilfe von Copliot eine Formel gebaut, die 2 Werte aus einer Tabelle 1 in einer Tabelle 2 prüfen soll und wenn die Konstellation vorkommt, soll das größte Wert dieser...
  8. Wert Fehler

    in Microsoft Excel Hilfe
    Wert Fehler: Hallo zusammen, sicher gibt es schon diverse Beiträge, leider habe ich keinen gefunden, der mein Problem los. Ich habe mal einen Auszug meiner Tabelle angehängt. Leider kriege ich in einigen...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden