none
EXCEL VBA Problem

    Frage

  • Hallo,

    wir haben bei uns einige Excel Anwendungen, die wir mit VBA Code versehen haben. Inzwischen passiert es immer häufiger, dass der Programmcode mit ganz unspezifischen nicht nachvollziehbaren Fehlermeldungen abbricht. Da wird zBsp plötzlich angezeigt, dass ein Sheet-Name nicht mehr den Regeln entsprechen würde, obwohl daran nichts geändert wurde und der VBA Code schon lange genau so im Einsatz war. Nachdem wir sehr lange nach einer Lösung dieser Probleme gesucht haben ist uns aufgefallen, dass wir im VBA Editor "nur" auf den Button "Makro ausführen (F5)" klicken müssen - das Makro also aus dem VBA Editor manuell starten müssen, dann Excel beenden und wieder starten, und die Fehlermeldung ist für mehrere Tage wieder weg. Wie gesagt, das Ganze ohne, dass wir dafür irgendwas am VBA Code ändern müssen!

    Das funktioniert bei mehreren völlig unabhängig voneinander programmierten Excel Anwendungen auf mindestens einem dutzend verschiedener PCs in unserem Netzwerk so. Überall gelegentlich diese unspezifischen Fehler, die nach dem manuellen Aufruf des Makros wieder laufen.

    Kennt jemand diese Problematik? Und weiß jemand was man daran machen kann?

    Gruß

    Statler

    Mittwoch, 18. April 2018 09:55

Alle Antworten

  • Abbrechen tut der eigentlich nicht, außer wenn man per on Error alle Fehler abfängt.

    Man kann beim Auftreten des Fehlers dann in den Debug-Modus schalten um die Ursache genau zu untersuchen.
    "Unspezifizierte" Fehler gibt es eigentlich im VBA nicht.

    Mittwoch, 18. April 2018 12:40
  • Ja, da hast Du recht - die sind irgendwie spezifiziert aber unsinnig. Also etwas genauer: Wir haben einen VBA Code und ändern etwas. Zum Beispiel einen Variablenwert. Dann starten wir Excel wieder und Excel bricht mit einer Fehlermeldung ab. Dann geht man in den Debug Modus und dort wird zB. - wie oben schon erwähnt - angezeigt, dass der Sheet Name nicht zulässig sei. Die Änderung die wir durchgeführt haben (also die Variablenänderung) ist aber zu dem Zeitpunkt im VBA Code noch gar nicht angesprungen worden; der Interpreter war noch gar nicht soweit und bricht das Programm an einer viel früheren Stelle ab. Dann drücken wir einmal auf F5 - egal was dann passiert (erneute Fehlermeldung) - wir beenden Excel und starten neu und alles läuft wieder.

    Gruß

    Statler

    Mittwoch, 18. April 2018 13:44
  • Aber der Debugger muss doch genau auf der fehlerhaften Zeile anhalten, so dass man sich die Variablen, die zu diesem Fehler geführt haben, anzeigen kann (z.B. im Direktfenster per "?Variable).

    Temporär schalte ich da zum Testen eine aktive OnError ab: "on error goto 0".
    Wenn das nicht hilft, kann man ja einen Breakpoint auf dem Änderungsbefehl setzen und im Einzelschritt durchlaufen.

    Manchmal sucht man da durch die Fehlerbehandlung an der falschen Stelle;-).

    Mittwoch, 18. April 2018 15:54
  • Wenn der Debugger an der Stelle halten würde, andem der Fehler liegt, ware es ja einfach. Dann würde ich den Fehler sehr leicht abstellen können. Der Debugger zeigt aber eine Stelle im Programmcode an, die er noch gar nicht angesprungen hatte, weil das Programm noch gar nicht so weit gekommen ist. (Siehe meinen letzten Beitrag dazu).

    Oder der Debugger zeigt an, dass der Sheetname (in unserem Fall heißt das Sheet "CoC") nicht zulässig sei, obwohl das Sheet nach der Fehlerbehebung - so wie ich es oben beschrieben habe - wieder akzeptiert wird.Es ist also kein nachvollziehbarer Fehler, sonst hätten wir ihn schon umprogrammiert.

    Ich tippe auf eine bestimmte Kombination / Verwendung von Excel Befehlen oder Excel-Settings, die beim "Compilieren" (bzw VBA hat ja ein Interpreter) z.B. einen Speicherüberlauf generieren. Also so was in der Art vermute ich.



    • Bearbeitet Statler_68 Freitag, 20. April 2018 09:29
    Freitag, 20. April 2018 09:10
  • Also, wenn der Debugger wirklich bei dem Fehler anhalten soll, wo er auftritt, empfehle ich dir die Einstellung in der VBA-IDE unter "Extras->Optionen>Allgemein->Unterbrechen bei Fehlern->Bei jedem Fehler".

    Dies führt eben auch dazu, dass "on error resume next" ignoriert wird.
    Ansonsten stoppt der Debugger nur bei Fehlern, die nicht explizit mittels "on error ..." überwacht werden.
    Das führt u.U. auch dazu, dass an anderen Stellen auch plötzlich Fehler gemeldet werden, die man ansonsten ignoriert hat. Allerdings kann man durch explizites Abfragen der Situation vorher, dem Fehler ja ausweichen.
    Das ist dann korrekter Programmierstil.

    Des weiteren empfehle ich dir in jedem Modul/Formular/Klasse als 1. Zeile "Option Explicit".
    Dies verhindert automatische Veriablendeklaration z.B. durch Schreibfehler.

    Anders wird man solche Fehler nicht finden können.

    Ich mache seit Excel97 VBA und bisher hatte VBA bei Fehlern in meinen Programmen immer Recht.

    Freitag, 20. April 2018 10:30
  • Danke für deine Tips.

    Aber ich denke, Du hast was wirklich wichtiges bei meiner Fehlermeldung überlesen! Du setzt voraus, dass ich einen Fehler im Programmtext habe (logisch oder formell oder wie auch immer!).

    Wenn dem so wäre, würde das Programm aber immer abbrechen und dann auch immer die Fehlermeldung bringen. Da der Fehler  - wie schon mehrfach geschrieben - durch manuelles anklicken des Debuggers (also gemeint ist die F5 Taste wenn der VBA Screen geöffnet ist) - für Tage nicht mehr auftritt - sind all diese Fehlermöglichkeiten, die mit einem Fehler im Programm selber zu tun haben, nicht mehr möglich.

    Unsere Programme sind bei weitem nicht so komplex, dass bestimmte Programmcode-Bereiche nur alle paar Tage mal angesprungen würden.  

    Gruß

    Statler


    • Bearbeitet Statler_68 Freitag, 20. April 2018 11:50
    Freitag, 20. April 2018 11:22
  • Nun ja, ich kann mich dunkel noch an einen ähnlichen Fall erinnern.

    Excel speichert nebem dem VBA-Quelltext ebenso auch das Template des generierten P-Codes. Es wird also nicht ständig kompliert.
    Die Erstellung des P-Codes läuft nur, wenn das Modul/Form/Klasse geändert werden.

    Nun kann man Dinge versuchen:

    1. Die Excel-Datei unter einer anderen Version (als z.B. XLS statt XLSM) und wieder zurück. Dies sollte Excel zwingen, einen Recomplie durchzuführen.

    2. Jedes Modul des Excel eine kleine Änderung machen, speichern, wieder zurücknehmen und speichern. Auch dies zwingt zu einem Recompile.

    3. eine neue Excel-Mappe erstellen, alle Module aus der alten exportieren und in die neue importiern. Das sollte auf jeden Fall zu einer sauberen Exceldatei führen.

    Vielleicht mal prüfen, ob die Änderungsverfolgung aktiviert ist:
    https://support.office.com/de-de/article/nachverfolgen-von-%C3%84nderungen-in-einer-freigegebenen-arbeitsmappe-22aea671-cac7-4fa3-845d-eeb23725bd15


    • Bearbeitet bfuerchau Freitag, 20. April 2018 13:21
    Freitag, 20. April 2018 13:21