Service: Visual-Basic 6.0 Tipps: Fehler 91


Einer der 'beliebtesten' Fehler in VB 6.0 Programmen:

Wer als Anwender eine Fehlermeldung mit Code 91 sieht, weiss drei Dinge:

  • Die Anwendung wurde in Microsoft Visual Basic 6.0 geschrieben (Hilft dem Anwender recht wenig).
  • Der Programmierer hat irgend etwas in seinem Programmcode falsch gemacht bzw. irgend eine besondere Konstellation nicht bedacht.
  • Als Anwender kann man in den seltensten Fällen etwas tun.

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.

Fehler 91 vermeiden

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
Fehler 91 finden und beseitigen.

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.

Seitenanfang

Kontaktaufnahme- und Terminvereinbarung:

Bei Fragen und für Terminvereinbarungen erreichen Sie uns unter:

0 63 49 99 07 38

0 151 51 95 34 00

Oder nutzen Sie das Kontaktformular




Ihr Ansprechpartner:


Hier sollte das Fahnungsfoto zu sehen sein.

Ralf Kunsmann

Spezialist für VBA-Programmierung
(alle Office-Anwendungen)
Entwickler der
VBA-Extension-Tools