Fehlerhafte Zeilen anzeigen lassen

Im Beitrag “Fehlerbehandlung per VBA hinzufügen” (www.access-im-unternehmen.de/1514) zeigen wir, wie man Fehlerinformationen direkt per VBA in eine Fehlertabelle schreibt, um diese später zu kontrollieren. Wenn man nun als Entwickler eine fehlerhafte Datei mit einigen protokollierten Fehlern vom Benutzer erhält, möchte man vielleicht direkt die fehlerhaften Stellen einsehen. Dazu muss man allerdings erst nachsehen, welches Modul, welche Prozedur und welche Zeile betroffen sind, dann die entsprechende Stelle im VBA-Editor suchen und so weiter. Bei einer umfangreichen Datenbank kann das sehr mühselig werden, vor allem wenn man sich von Fehler zu Fehler hangelt. Deshalb liefern wir in diesem Beitrag noch eine praktische Ergänzung, wenn Sie ohnehin schon eine Tabelle wie aus dem oben genannten Beitrag zum Speichern der Fehler verwenden: Ein Formular, dass diese Fehler anzeigt und mit dem Sie per Mausklick auf einen Fehler direkt die entsprechende Stelle im VBA-Editor anzeigen können.

Ziel des Beitrags

Ziel dieses Beitrags ist es, die Inhalte der Tabelle aus Bild 1 in einem Unterformular in der Datenblattansicht anzuzeigen, um diese dann zu selektieren und die Stelle zu der Fehlermeldung direkt im Quellcode anzuzeigen.

Die Inhalte dieser Tabelle sollen im Formular angezeigt werden

Bild 1: Die Inhalte dieser Tabelle sollen im Formular angezeigt werden

Formular und Unterformular erstellen

Dazu legen wir zunächst ein Unterformular an, dem wir als Datensatzquelle die Tabelle tblErrors zuweisen. Wir ziehen alle Felder dieser Tabelle bis auf das Feld ID in den Detailbereich des Formularentwurfs und stellen die Eigenschaft Standardansicht auf Datenblatt ein.

Dann schließen wir das Formular und speichern es unter dem Namen sfmErrors. Anschließend legen wir das Hauptformular an. Diesem fügen wir das Unterformular sfmErrors per Drag and Drop aus dem Navigationsbereich hinzu. Damit es seine Größe anpasst, wenn wir die Größe des Formulars ändern, stellen wir die beiden Eigenschaften Horizontaler Anker und Vertikaler Anker auf den Wert Beide ein. Die beiden automatisch geänderten entsprechenden Eigenschaften des Bezeichnungsfeldes stellen wir wieder auf die ursprünglichen Werte Links und Oben ein.

Außerdem stellen wir die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Trennlinien und Bildlaufleisten für das Hauptformular auf Nein ein.

Schließlich benötigen wir zumindest eine Schaltfläche, mit der wir den aktuell markierten Fehler im VBA-Editor anzeigen können. Dieser geben wir den Namen cmdShowInVBAEditor und hinterlegen dann eine Ereignisprozedur für das Ereignis Beim Klicken.

Anschließend sieht das Formular in der Entwurfsansicht wie in Bild 2 aus.

Das Formular frmErrors mit Unterformular

Bild 2: Das Formular frmErrors mit Unterformular

Verweis zum Programmieren des VBA-Editors

Bevor wir diese füllen, fügen wir, sofern noch nicht vorhanden, noch einen Verweis auf die Bibliothek Microsoft Visual Basic Extensibility 5.3 Object Library hinzu. Diese liefert das Objektmodell, mit dem wir den VBA-Editor programmieren können.

Prozedur zum Anzeigen und Markieren einer Zeile

Anschließend füllen wir die Ereignisprozedur cmdShowInVBAEditor_Click mit der Prozedur aus Listing 1.

Private Sub cmdErrors_Click()
     Dim objVBProject As VBIDE.VBProject
     Dim objVBComponent As VBIDE.VBComponent
     Dim objCodeModule As VBIDE.CodeModule
     Dim objCodePane As VBIDE.CodePane
     Dim strErrorModule As String
     Dim strErrorProcedure As String
     Dim lngErrorLine As String
     Dim lngLine As Long
     Dim lngLastLine As Long
     Dim strLine As String
     Dim strProcedure As String
     Dim intProcType As vbext_ProcKind
     
     With Me!sfmErrors.Form
         strErrorModule = !ErrorModule
         strErrorProcedure = !Errorprocedure
         lngErrorLine = !ErrorLine
     End With
     
     Set objVBProject = VBE.ActiveVBProject
     Set objVBComponent = objVBProject.VBComponents(strErrorModule)
     Set objCodeModule = objVBComponent.CodeModule
     
     For lngLine = 1 To objCodeModule.CountOfLines
         strLine = objCodeModule.Lines(lngLine, 1)
         Debug.Print lngLine, Val(strLine), strLine
         strProcedure = objCodeModule.ProcOfLine(lngLine, intProcType)
         If strProcedure = strErrorProcedure And lngErrorLine = Val(strLine) Then
             Exit For
         End If
     Next lngLine
     
     Set objCodePane = objCodeModule.CodePane
     
     lngLastLine = lngLine
     Do While right(Trim(objCodeModule.Lines(lngLastLine, 1)), 1) = "_"
         lngLastLine = lngLastLine + 1
     Loop
     
     objCodePane.SetSelection lngLine, 1, lngLastLine, 999
     objCodePane.Show
End Sub

Listing 1: Prozedur zum Anzeigen des Codes zu einer Fehlermeldung

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

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar