none
Vba, benutzerdefinierte Klasse, benutzerdefinierter Fehler nach Ereignis

    Allgemeine Diskussion

  • Hallo,
    ich habe eine Klasse geschrieben, die ein Ereignis auslöst:


    Sub MakeError()

       On Error GoTo jmError
       RaiseEvent SomeEvent(1, 2, 3)
    jmExit:
       Exit Sub

       'Fehlerbehandlung
    jmError:
       Msgbox "Das sollte nicht passieren!"
       Resume jmExit

    End Sub


    Wenn nun während der Verarbeitung des Events SomeEvent ein Fehler auftritt, funktioniert die hier vorgesehene Fehlerbehandlung nicht.

    Hintergrund: Im Ereignis schreibe ich ein Log am Sql-Server, das dort validiert wird und von dort aus wird ggf. auch ein Fehler ausgelöst.

    Frage: Ist es möglich, den Fehler so wie angegeben zu verarbeiten? Ob und warum ist dieses Verhalten in Vba so gewollt?

    Habe eine kleine, nur aus einem vb-Teil bestehende, Demo-Datenbank erstellt:
    http://www.guardi-line.at/tmp/FehlerDemo.mdb

    Hilfe!
    Danke,
    Georg

    Donnerstag, 6. Oktober 2011 12:51

Alle Antworten

  • Hallo Georg,
    ich habe bei mir auch das Problem nachgestellt. Ich habe allerdings einen Weg gefunden einen Fehler in der Event-Verarbeitung zu signalisieren. Ich habe einen zusätzlichen ByRef Long Parameter, der die Error-Nummer zurückgibt:    
    Hier ist die Klasse mit Event-Definition:
    Option Explicit
    
    Public Event SomeEvent(vPar1 As Variant, vPar2 As Variant, vPar3 As Variant, ByRef lngErrorNo As Long)
    
    Public Sub MakeError()
        Dim lngErr As Long
        
        On Error GoTo jmError
        RaiseEvent SomeEvent(1, 2, 3, lngErr)
        If lngErr <> 0 Then
            Err.Raise lngErr
        End If
    jmExit:
        Exit Sub
        
        'Fehlerbehandlung
    jmError:
        MsgBox "Das sollte nicht passieren!"
        Resume jmExit
    
    End Sub
     
    

     
    Hier das Modul wo die Klasse angesprochen wird:
    Option Explicit
    
    Dim WithEvents clsMyClass1 As Class1
        
    Private Sub clsMyClass1_SomeEvent(vPar1 As Variant, vPar2 As Variant, vPar3 As Variant, lngErrorNo As Long)
        On Error GoTo reportError
        DoCmd.OpenForm "this_form_doesnt_exit"
        
    reportError:
        lngErrorNo = Err.Number
    End Sub
    

     
    Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Montag, 10. Oktober 2011 12:53
    Moderator
  • Hallo Georg

    Georg Matejka wrote:

    Sub MakeError()

    On Error GoTo jmError
    RaiseEvent SomeEvent(1, 2, 3)
    jmExit:
    Exit Sub

    'Fehlerbehandlung
    jmError:
    Msgbox "Das sollte nicht passieren!"
    Resume jmExit

    End Sub


    Wenn nun während der Verarbeitung des Events SomeEvent ein Fehler
    auftritt, funktioniert die hier vorgesehene Fehlerbehandlung nicht.

    Hast Du in SomeEvent() einen ErrorHandler drin? Falls ja, dann wird der Fehler nicht zurückgegeben. Das ist so von VBA gewollt.
    Kommentiere mal alle Error Handling Teile in SomeEvent() aus und versuche es erneut. Wenn dort dann ein Fehler auftritt, dann wird die Prozedur unterbrochen und der Fehler an die aufrufende Prozedur zur Behandlung zurückgegeben.

    Für das ErrorHandling habe ich mal ein WhitePaper beim www.dbdev.org hochgeladen. Wäre vielleicht mal eine Lektüre wert.

    Gruss
    Henry

    Donnerstag, 13. Oktober 2011 04:22
  • Da fällt mir gerade noch was anderes auf:

    Henry Habermacher wrote:

    RaiseEvent SomeEvent(1, 2, 3)

    RaiseEvent ist hier natürlich unsinnig. Ruf' einfach nur

    Call SomeEvent(1, 2, 3)

    auf.

    Donnerstag, 13. Oktober 2011 04:23
  • Hallo Georg,

    Bist Du weitergekommen?

    Danke und viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Mittwoch, 19. Oktober 2011 17:47
    Moderator
  • Dieser Thread wurde in Diskussion umgewandelt. Natürlich sind weitere Nachfragen / Beiträge möglich und selbstverständlich willkommen.

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 25. Oktober 2011 13:13
    Moderator