Service: Visual-Basic 6.0 Tipps: Fehler 91
Wer als Anwender eine Fehlermeldung mit Code 91 sieht, weiss drei Dinge:
Als Programmierer der betreffenden Software weiss man: Dem Fehler liegt im Prinzip ein Quellcode wie der folgende zugrunde
Dim o As Object
Debug.Print o.o
Der richtige Quellcode müsste jedoch so aussehen:
Dim o As Object
Set o = New Object
Debug.Print o.o
Anders gesagt: Es wird versucht, auf eine Objektvariable (bzw. auf eine Eigenschaft oder Methode einer Objektvariablen) zuzugreifen, bevor die Objektvariable instanziiert wurde.
In dem Codebeispiel oben ist der Fehler offensichtlich und leicht zu beheben. In einem komplexen Quellcode kann das aber durchaus ganz anders sein. Z.B. wenn Objektvariablen als Parameter einer Unterroutine (Property, Sub oder Function) verwendet werden.
Theoretisch können Sie jede Objektvariable prüfen, bevor Sie sie 'verwenden'. Beispiel:
Private Sub Test(o as Object)
' Testen
If o Is Nothing Then
' Versuchen, die Objektvariable zu instanziieren
' oder sinnvolle Fehlermeldung ausgeben.
End If
' Hier der eigentliche Code
End Sub
Wenn trotz sorgfältiger Programmierung Fehler 91 auftritt kann es (wie bei jedem Fehler) schwierig werden, die Stelle im Quellcode zu finden, die den Fehler verursacht. Dies gilt besonders, wenn der Fehler nur beim Anwender auftritt und an Ihrem Entwicklungsrechner nicht reproduziert werden kann. Dies ist ja leider sehr häufig der Fall.
Wenn Sie sich die Fehlermeldung noch einmal genau ansehen, sehen Sie einen möglichen Lösungsansatz - nämlich in der dritten Zeile der Fehlermeldung. Der entsprechende Quellcode sieht folgendermaßen aus:
Option Explicit
Private Const msMODULENAME As String = "Form1"
Private Sub Form_Load()
1005 Const sPROCEDURENAME As String = "Form_Load"
1006 On Error GoTo ErrorForm_Load
1008 Dim o As Object
1009 Debug.Print o.o
1011 Exit Sub
ErrorForm_Load:
' Show error message
DisplayErrorMsg "Fehler in Anwendung. ", Err.Number, Err.Description, _
msMODULENAME, sPROCEDURENAME, Erl
End Sub
Das sieht ein bischen wie programmieren im 'Mittelalter' aus. Zeilennummern - grässlich!!!
Tatsächlich, das ist extrem hässlich und auch sehr umständlich zu schreiben. Aber: In der Fehlerbehandlungsroutine kann man auf diese Weise mit Hilfe von 'Erl' (bedeutet 'ErrorLine') und den beiden Konstanten 'msMODULENAME' und 'sPROCEDURENAME' die genaue Fehlerstelle auswerten. Und dies kann in manchen Fällen der schnellste Weg zur Fehlerbeseitigung sein.
'DisplayErrorMsg' sieht übrigens so aus:
Public Sub DisplayErrorMsg(Description As String, _
ErrNumber As Long, _
ErrDescription As String, _
ModuleName As String, _
ProcedureName As String, _
Optional ErrorLine As Long = 0)
If ErrorLine > 100000 Then ErrorLine = ErrorLine - 100000
Dim sMsg As String
sMsg = Description & vbCrLf & vbCrLf & _
"Reason: " & ErrNumber & " - " & ErrDescription & vbCrLf & vbCrLf & _
"Debug Information (for software developer): Appearance at '" &
ModuleName & "::" & ProcedureName & IIf(ErrorLine <> 0, "::" & CStr(ErrorLine), "") & "."
MsgBox sMsg, vbInformation, App.Title
End Sub
Wenn Sie möchten, können Sie diesen Code gerne kopieren und nach Belieben verwenden.
Wenn Sie wissen wollen, was so alles auf Ihrem PC passiert!
Tischrechner als Software.
Jetzt herunterladen und kostenlos testen!
Tastenkombinationen können PC-Arbeit erheblich beschleunigen.
Eine Reihe von kostenlosen Online-Berechnungen zur Erleichterung der täglichen Arbeit.
Sicherheit im PC-Bereich
Es existiert eine kostenlose, einfache und äußert effektive Methode, fast alle Viren, Trojaner, Würmer ...