window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Debugging im VBA-Editor, Teil 2

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Nachdem Sie im ersten Teil dieser Artikelreihe einige codebasierten Debugging-Techniken kennengelernt haben, schauen wir uns in diesem Teil weitere VBA-gesteuerte Features an. Außerdem werfen wir einen Blick auf die Tools, die der VBA-Editor uns zum Debuggen bietet. Dazu gehören beispielsweise das Lokalfenster und die überwachungen.

Anhalten bei bestimmtem Wert

Wenn Sie eine Stelle im Code zur Laufzeit untersuchen möchten, fügen Sie dort entweder einen Haltepunkt oder die Stop-Anweisung ein. Beides hält den Code bei jedem Erreichen der entsprechenden Stelle an.

Manchmal wird die betroffene Codestelle jedoch sehr oft durchlaufen, sodass der Code entsprechend oft angehalten und beispielsweise die Variablen untersucht werden müssen. In vielen Fällen wissen Sie jedoch, dass ein Problem nur unter bestimmten Bedingungen auftaucht. So könnte es sein, dass Sie in einer Schleife alle Datensätze der Tabelle tblArtikel durchlaufen, aber schon wissen, dass ein Problem nur bei einem bestimmten Datensatz auftaucht.

Wenn Sie wissen, dass ein Problem immer in Zusammenhang mit dem Datensatz mit dem Wert 20 im Feld ArtikelID auftaucht, können Sie gezielt einen Haltepunkt setzen. Damit dieser auch nur für den betroffenen Datensatz erreicht wird, fassen Sie diesen in eine entsprechende If…Then-Bedingung ein. Dies sieht beispielsweise wie in Bild 1 aus, wobei die Bedingung rst!ArtikelID = 20 lautet. Nur wenn diese Bedingung erfüllt ist, wird die innerhalb der If…Then-Bedingung enthaltene und mit einem Haltepunkt versehene Anweisung erreicht. Nun können Sie beispielsweise weitere Werte des aktuellen Datensatzes im Direktfenster ausgeben – etwa so:

Anhalten des Codes bei Erreichen eines bestimmten Wertes

Bild 1: Anhalten des Codes bei Erreichen eines bestimmten Wertes

Debug.Print rst!Artikelbestand

Haltepunkt per Assert

Die Debug-Klasse bietet neben der Print-Methode noch eine weitere, relativ unbekannte Methode. Diese heißt Assert und erwartet einen Ausdruck als Parameter, der entweder den Wert True oder False zurückliefert. Wenn der Ausdruck den Wert False zurückgibt, hält die Prozedur automatisch in der Zeile mit der Debug.Assert-Anweisung an.

Im Gegensatz zum vorherigen Beispiel, wo die Debug.Print mit dem Haltepunkt genau beim Eintreten der gewünschten Bedingung ausgelöst wird, müssen Sie bei Debug.Assert also genau dem umgekehrten Fall formulieren.

Auf jeden Fall brauchen Sie mit Debug.Assert nur eine statt drei Zeilen, um den Code beim Eintreten der gewünschten Bedingung anzuhalten:

Public Sub GezielterHaltepunkt_II()
     Dim db As DAO.Database
     Dim rst As DAO.Recordset
     Set db = CurrentDb
     Set rst = db.OpenRecordset( _
         "SELECT * FROM tblArtikel", dbOpenDynaset)
     Do While Not rst.EOF
         Debug.Assert Not (rst!ArtikelID = 20)
         rst.MoveNext
     Loop
End Sub

Sie müssen lediglich beachten, dass Sie den Ausdruck durch Voranstellen des Schlüsselworts Not ins Gegenteil umkehren.

Das Lokal-Fenster

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar