HERBERS Excel-Forum - die Dialoge

Thema: VB-Editor

Home
Die bei der Arbeit auftretende Fehlerquote dürfte - mit Ausnahme der Politik - in keinem Arbeitsbereich so hoch sein, wie in der Programmierung. Im Gegensatz zu der vorgenannten Ausnahme werden hier Fehler gnadenlos abgestraft. Dies geschieht entweder durch die Lieferung fehlerhafter Ergebnisse oder profane Programmabbrüche.

Vor Programmabbrüchen kann man sich schützen, indem man Fehlerroutinen einbaut. An dieser Stelle der nicht zu unterschätzende Rat, Fehler nicht durch den On Error Resume Next-Befehl zu verkleistern, da Sie andernfalls über auftretende Fehler hinweggetäuscht werden und die Korrektheit des Programmablaufes nicht mehr beurteilen können.

  • Grundeinstellungen des VB-Editors

    Über das Menü Extras -> Optionen... können Sie die Grundeinstellungen des VB-Editors festlegen:



    Der Optionen-Dialog:


    Die Optionen

    • Automatische Syntaxüberprüfung
      Beim Verlassen der aktuellen Codezeile wird die Syntax dieser Zeile überprüft. Ist sie fehlerhaft, erfolgt eine entsprechende Meldung:


      Da man in der Programmier-Praxis des öfteren die aktuelle Codezeile verläßt, ohne dass sie bereits abschließend bearbeitet wurde, wirkt sich dieses Feature eher störend aus.
      Die CheckBox sollte deaktiviert bleiben.


    • Variablendeklaration erforderlich
      Grundlage jeder ordentlichen Programmierung ist das saubere Deklarieren einzusetzender Variablen. Um die Deklaration zu erzwingen, sollte die CheckBox aktiviert werden. Bei aktivierter CheckBox wird in jedem Modul eine Zeile mit dem Text Option Explicit vorangesetzt. Wird eine Prozedur aufgerufen mit einer fehlenden Variablendeklaration aufgerufen, erfolgt eine entsprechende Meldung:


      Beachten Sie bitte, dass nur die Deklaration der Variablen erwartet wird, nicht die Dimensionierung. Dennoch sollten Sie jede Variable dimensionieren; es hilft, Fehler zu vermeiden und Fehler zu finden. Dies gilt ebenfalls für Objektvariablen.


    • Elemente automatisch auflisten
      Erfolgte eine korrekte Dimensionierung der Objektvariablen, werden die Elemente (Eigenschaften, Methoden etc.) des dimensionierten Objekts zur Auswahl aufgelistet, nachdem der Variablenname gefolgt von einem Punkt eingegeben wurde:


      Die CheckBox sollte aktiviert werden.


    • Automatische Quickinfo
      In einer Informationsleiste werden die zur Verfügung stehenden Parameter der aufgerufenen Methode, Objekts oder Funktion angezeigt:


      Die CheckBox sollte aktiviert werden.


    • Automatische Datentips
      Beim Überfahren einer Datenvariablen mit der Maus wird im Debug-Modus der aktuelle Wert der jeweiligen Variablen angezeigt:


      Die CheckBox sollte aktiviert werden.


  • Debuggingwerkzeuge

    • MessageBox
      Die einfachste Art einer Werteüberprüfung ist die Anzeige des Variablenwertes über den Aufruf einer MessageBox:

      
      Sub TestValue()
         Dim dValue As Double
         Dim iRow As Integer
         On Error GoTo ERRORHANDLER
         For iRow = 1 To 100
            dValue = dValue + Cells(iRow, 1).Value
         Next iRow
         Exit Sub
      ERRORHANDLER:
         MsgBox "Ungültiger Wert in Zeile " & iRow
      End Sub
      
      Nach der Entwicklungsphase ist der Code von diesem Test-Sequenzen zu bereinigen bzw. sind diese auszukommentieren.


    • Statusleiste
      Zum Testen der Performance einer Code-Schleife empfiehlt sich die Anzeige der jeweiligen Schleifenposition als Statusbar-Meldung:

      
      Sub PrintNumbers()
         Dim lRow As Long
         Dim bStatus As Boolean
         With Application
            bStatus = .DisplayStatusBar
            .DisplayStatusBar = True
            For lRow = 1 To Rows.Count
               If lRow Mod 1000 = 0 Then
                  .StatusBar = "Bearbeite " & lRow & "..."
               End If
               Cells(lRow, 1).Value = lRow
            Next lRow
            .StatusBar = False
            .DisplayStatusBar = bStatus
         End With
      End Sub
      


    • Stop-Anweisung
      Der Ablauf des VBA-Programms wird an Position der Stop-Anweisung angehalten, nicht beendet; die Ansicht wechselt in die Entwicklungsumgebung; alle Variablenwerte bleiben erhalten:


      Von der Position der Stop-Anweisung kann im Einzelschritt o.ä. mit dem Ablauf fortgefahren werden.


    • Menü- und Symbolleiste Debuggen

      Das Menü:


      Die Symbolleiste:



      • Menü: Kompilieren von VBA-Projekt

        Anders als zu kompilierende Quellprogramme, die in VB, C oder einer andere Programmierprache geschrieben werden, produziert der VBA-Kompilations-Prozeß keinen Maschinencode. Es wird kein ausführbarer Code im Sinne einer EXE-Datei erstellt. Der VBA-Quellcode kann vom kompilierten VBA nicht wirklich getrennt werden, da er immer mit der zugehörigen Arbeitsmappe gespeichert wird.

        Beim Kompilieren wird die interne Darstellung des VBA-Codes vom plattformunabhängigen zum plattformabhängigen Code übersetzt. Wenn Sie ein Quellenprogramm in ein Modul eingeben, wird es nie als der Text in der Arbeitsmappe gespeichert, wie Sie ihn eingegeben haben. Stattdessen gespeichert wird eine Byte-Codedarstellung des Quellprogramms, der sogenannte OpCode. Mit anderen Worten, gespeichert werden nicht die Wörter Cells(iCounter, 1).Value = 12, gespeichert wird eine interne Darstellung dieses Codes in der Datei. Der OpCode ist für alle Plattformen gleich, für Mac, Windows, Windows98, WindowsNT, usw..

        Wenn Sie ein VBA-Projekt kompilieren, wird der vorhandene OpCode in sogenannten ExCode übersetzt. Dieser ist im Gegensatz zum OpCode plattformabhängig. Die ExCodes sind unterschiedlich, weil sie durch verschiedene Run Time Libraries gelesen werden. Beispielsweise wird der ExCode für Cells(iCounter, 1).Value = 12 auf einem Mac- anders als auf einem Windows-Rechner gespeichert.

        Beim Kompilieren wird die Syntax überprüft und der ExCode mit der Arbeitsmappe gespeichert, was das Öffnen der Arbeitsmappe beschleunigt. Im Regelfall erübrigt sich ein expliziter Kompilierungsaufruf über Menü Debuggen -> Kompilieren von VBA-Projekt, da die Kompilierung automatisch während der Laufzeit erfolgt.


      • Menü: Ausführen bis Curosor-Position oder ShortCut: Strg+F8

        Der Code wird bis zur Cursorposition ausgeführt, sonst wie die Stop-Anweisung.


      • Menü: Haltepunkt ein/aus oder Symbolleistenschaltfläche Haltepunkt oder Klick auf Modul-Seitenleiste

        Der Code wird bis zur Cursorposition ausgeführt, sonst wie die Stop-Anweisung.




      • Menü: Einzelschritt oder Symbolleistenschaltfläche oder ShortCut F8

        Der Code wird zeilenweise durchlaufen.




      • Menü: Prozedurschritt oder Symbolleistenschaltfläche oder ShortCut Umschalt+F8

        Ein Unterprogramm wird ohne Einzelschrittmodus aufgerufen.


      • Menü: Prozedur abschließen oder Symbolleistenschaltfläche oder ShortCut Strg+Umschalt+F8

        Die aktuelle Prozedur wird abgeschlossen.


      • Menü: Aktuellen Wert anzeigen... oder Symbolleistenschaltfläche oder ShortCut Umschalt+F9

        Der Wert der markierten Variablen wird angezeigt.




      • Symbolleistenschaltfläche Aufrufliste

        Eine Liste der bisher durchlaufenen Prozeduren wird angezeigt:


        Der Cursor wird in der auszuwählenden Prozedur positioniert:




      • Die Fenster

        • Lokal-Fenster Lokal-Fenster

          Das Lokal-Fenster bietet Ihnen eine Übersicht über die Werte aller Variablen der sich aktuell im Schrittmodus befindenden Prozedur.




        • Direktfenster Direktfenster


          Die Microsoft-Hilfe zum Direktfenster:


          Verwenden des Direktfensters

          Das Direktfenster zeigt Informationen an, die sich aus Anweisungen zur Fehlerbeseitigung in Ihrem Code oder aus Befehlen, die direkt in dieses Fenster eingegeben wurden, ergeben.

          So zeigen Sie das Direktfenster an

          • Wählen Sie im Menü Ansicht den Befehl Direktfenster (STRG+G).

          So führen Sie Code im Direktfenster aus

          1. Geben Sie eine Code-Zeile im Direktfenster ein.

          2. Drücken Sie die EINGABETASTE zur Ausführung der Anweisung.

          Verwenden Sie das Direktfenster, um folgende Operationen auszuführen:

          • Testen von schwierigem oder neu geschriebenem Code.

          • Abfragen oder Ändern eines Variablen-Wertes, während eine Anwendung ausgeführt wird. Wenn die Ausführung angehalten wird, können Sie der Variablen einen neuen Wert zuweisen, wie Sie dies auch im Code tun würden.

          • Abfragen oder Ändern eines Eigenschaftswertes, während eine Anwendung ausgeführt wird.

          • Aufrufen von Prozeduren, wie Sie dies auch im Code tun würden.

          • Anzeigen von Testergebnissen, während das Programm ausgeführt wird.

            Anmerkung   Anweisungen im Direktfenster werden in einem Kontext ausgeführt - d.h. sie werden ausgeführt, als ob sie in einem bestimmten Modul eingegeben worden wären.

          Wenn Sie Hilfe zur Syntax der Funktionen, Anweisungen, Eigenschaften oder Methoden benötigen, während Sie im Direktfenster arbeiten, wählen Sie das Schlüsselwort, den Eigenschafts- oder Methodennamen aus, und drücken Sie F1.



        • Überwachungsfenster Überwachungsfenster

          Im Überwachungsfenster können Sie die Werte einzelner Variablen einsehen.