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 schreiben, 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 direkt 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. 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 die 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. 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 Die Prozedur liest zuerst die relevanten Informationen f r den aktuell markierten Datensatz aus und tr gt diese in die Variablen strErrorModule, strErrorProcedure und lngErrorLine ein. Dann erstellt sie einen Verweis auf das aktuelle VBA-Projekt und holt sich ebenfalls einen Verweis auf das VBComponent-Objekt mit dem Namen aus strErrorModule sowie auf dessen CodeModule-Element. Dann beginnen wir bereits, die Zeile zu finden, die den in der Tabelle tblError enthaltenen Fehler ausgel st hat. Dazu durchlaufen wir in einer ForNext-Schleife alle Zeilen des Moduls von der ersten Zeile bis zu der mit objCodeModule.CountOfLines ermittelten letzten Zeile. Dabei ermitteln wir mit der Lines-Funktion die aktuelle Zeile und schreiben diese in die Variable strLine. Au erdem ermitteln wir jeweils die Prozedur, zu der die aktuelle Zeile geh rt. Das erledigen wir mit der Funktion ProcOfLine, der wir als ersten Parameter die Zeilennummer und als zweiten die leere Variable intProcType bergeben (den damit zur ckgelieferten Wert ben tigen wir nicht, aber es ist ein Pflichtparameter). Wir pr fen dann f r jede Zeile, ob die Nummer der fehlerhaften Zeile mit der Zeilennummer der aktuellen Zeile bereinstimmt. Diese k nnen wir gl cklicherweise einfach mit der Val-Funktion ermitteln, die alle f hrenden Ziffern einer Zeichenfolge liefert in diesem Fall genau die Zeilennummerierung. Wenn wir uns in der richtigen Prozedur befinden und auch noch die Zeilennummer stimmt, verlassen wir die ForNext-Schleife und behalten so den aktuellen Wert der Laufvariablen lngLine bei. Nun folgt eine Ma nahme f r den Fall, dass die fehlerhafte Anweisung ber mehr als eine Zeile geht. Wir speichern lngLine in lngLastLine und pr fen in der Bedingung einer Do While-Schleife, ob das letzte Zeichen der Zeile lngLastLine der Unterstrich ist (_). Falls ja, erh hen wir lngLastLine um 1. Das machen wir solange, bis die folgende Zeile nicht mit dem Unterstrich endet. lngLine enth lt dann die Nummer der ersten Zeile und lngLastLine die Nummer der letzten Zeile der Anweisung. Nun referenzieren wir das CodePane-Element des CodeModule-Objekts und rufen dessen SetSelection-Methode auf. Hier bergeben wir f r den Parameter StartLine den Wert aus lngLine und f r EndLine den Wert aus lngLastLine. Au erdem stellen wir den Parameter StartColumn auf den Wert 1 ein und EndColumn auf 999. Die Show-Methode zeigt schlie lich das CodePane-Objekt an, was dem Codefenster entspricht. Das Ergebnis f r eine Beispielcodezeile sieht wie in Bild 3 aus. Bild 3: Das Formular zur Markierung von Codezeilen in Aktion Zusammenfassung und Ausblick Damit haben wir ein praktisches Werkzeug geschaffen, mit dem wir die in der Tabelle tblErrors gespeicherten Fehlerinformationen nutzen k nnen, um schnell zu den fehlerhaften Anweisungen zu gelangen und diese zu analysieren und zu korrigieren. The post Fehlerhafte Zeilen anzeigen lassen appeared first on Access im Unternehmen.

zum Artikel gehen

Excel - Tabelle Spalten als Zeilen anzeigen

Hallo zusammen, gibt es eine Möglichkeit in Excel die Tabelle so zu ändern, dass die Spalten (im Beispiel Liefertermine und Mengen) ebenfalls als Zeilen angezeigt werden? Im Anhang ein Beispiel. Im ersten Reiter "Ist" findet ihr die Tabelle, wie sie urs

zum Artikel gehen

Fehlerhafte Bankberatung: Oft teuer und am Bedarf vorbei!

Eine falsche Bankberatung kann sehr teuer werden. Warum in Deutschland die Bankberatung häufig den Kundenbedarf nicht berücksichtigt und wie Sie fehlerhafte Beratung vermeiden.

zum Artikel gehen

Platzierungen bei Spielpaarungen: Jetzt könnt ihr die aktuellen Plazierungen der Mannschaften direkt bei den Spielpaarungen anzeigen lassen...

Jetzt könnt ihr die aktuellen Plazierungen der Mannschaften direkt bei den Spielpaarungen anzeigen lassen. Einfach unter Einstellungen -> Allgemeines -> Platzierungen bei Spielpaarungen auf Anzeigen stellen und speichern!

zum Artikel gehen

Problem bei der Erstellung von Anzeigen

Wir haben in der letzten Zeit vermehrt Meldungen bzgl. Problemen bei der Erstellung von Anzeigen erhalten. In den meisten Fällen wurden zu große Grafiken für die Anzeigen verwendet. Der Prozess wurde jetzt so angepasst, dass über dem Weiter Schalter, ange

zum Artikel gehen

Muster-Reklamation über fehlerhafte Lieferung

Sehr geehrte Damen und Herren, Ich möchte mich heute ausdrücklich bei Ihnen über eine mangelhafte Lieferung beschweren, die ich von Ihnen erhalten habe. Am vergangenen Montag wurde mir eine Bestellung () Weiterlesen The post Muster-Reklamation über fehler

zum Artikel gehen