Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Class Initialisierung mit Fehlerprüfung

Forumthread: VBA Class Initialisierung mit Fehlerprüfung

VBA Class Initialisierung mit Fehlerprüfung
12.01.2017 16:19:30
Kursawe,
Salve zusammen
Bei der Initialisierung von VBA-Klassen will ich in der Initialize-Methode der class mehrere Anweisungen ausführen.
Ich arbeite gern mit Fehlerprüfungen und Abbruch bei unerwarteten Fehlern.
Hat jemand einen Tip, wie ich bei der initialisierten Klasse einen Fehlercode zurückliefern kann.
Idealerweise würde ich die neu geschaffene Klasse als nothing/null zurückgeben, wenn bei der Initialisierung ein Fehler auftrat. Schaff ich das irgendwie, die Klasse selbst als nothing zurückzugeben?
Beispiel
(Pseudofragmentcode)
class TEST
private xy as double
Private Sub class_initialize()
xy = 2/0
'Dividieren durch 0 liefert ja Fehler
'und hier will ich nun die Klasse als nothing zurückgeben, was ich dann nach
'Neuanlage im eigentlichen Programmcode abfragen kann
End Sub

und ja... in wirklichkeit teil ich nicht durch 0 oder frage den Teiler vorher noch ab, aber das soll ja nur ein hauruck-Beispiel zur Verdeutlichung des Problems sein
Thomas
Zusammengefasst: ich will prüfen können, ob die Initialisierung einer Klasse problemlos funktioniert hat und diese im weiteren Programmverlauf verwendet werden kann
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Class Initialisierung mit Fehlerprüfung
12.01.2017 16:25:46
Kursawe,
...gerade noch den Workaround eingebaut, daß ich der Klasse eine eigene Boolesche Variable mitgebe, die mir mit true/false anzeigt, ob die Initialisierung problemlos gelaufen ist.
Für schönere Lösungen bin ich aber dankbar
AW: VBA Class Initialisierung mit Fehlerprüfung
12.01.2017 17:16:46
Max2
Dafür gibt es On Error Statements
https://msdn.microsoft.com/de-de/library/5hsw66as.aspx
Anzeige
AW: VBA Class Initialisierung mit Fehlerprüfung
12.01.2017 20:58:10
Kursawe,
Danke, aber das ist klar
Solch ein on error Statement hätt ich auch in die Initialisierungsprozedur der Klasse eingebaut.
Und on error hätte ich dann gern nicht eine falsch oder fehlerhaft initialisierte Klasse zurückgegeben - oder noch schlimmer einen Makro-, Programm- oder gar Systemcrash, sondern z.B. ein nothing statt der Klasse.
Frage: wie geb ich beim Aufruf set xy-class = new xyKlasse nicht eine Klasse zurück sondern eine Art nothing, so daß ich dann nach dieser set-Anweisung abfragen kann, ob xy-class valide ist oder z.B. nothing (quasi daß der Check xy-class is nothing die Antwort true liefert, wenn bei der Initialisierung was schief lief)
... aufs erste scheints aber mit meinem Workaround zu funktionieren; gefällt mir nur nicht optimal....
Anzeige
AW: VBA Class Initialisierung mit Fehlerprüfung
13.01.2017 11:01:23
littletramp
Hallo Thomas
Erweitere deine Klasse mit einer boolschen ReadOnly-Eigenschaft, die du nach dem Instanzieren der Klasse abfragst.
Hier der Beispielcode:
Code im Klassenmodul:
Option Explicit
Private mblnIsValid As Boolean
Private Sub class_initialize()
Dim xy As Double
On Error GoTo ErrHandler
xy = 2 / 0     ' -> Error wenn Div/0
mblnIsValid = True
Exit Sub
ErrHandler:
mblnIsValid = False
End Sub
' für IsValid nur Property Get => IsValid ist ReadOnly
Public Property Get IsValid() As Boolean
IsValid = mblnIsValid
End Property

Code in sonstigem Modul:
Sub Test()
Dim class1 As Klasse1
Set class1 = New Klasse1
MsgBox class1.IsValid
Set class1 = Nothing
End Sub
Gruss Markus
Anzeige
AW: VBA Class Initialisierung mit Fehlerprüfung
13.01.2017 21:32:12
Kursawe,
Danke Markus
das war genau auch mein workaround.
Dann war ich zumindest nicht ganz so verkehrt. Hätte nur gehofft, es ginge noch eleganter. Aber eigentlich ist das ja elegant genug :)
Danke Dir!
Thomas
;
Anzeige

Infobox / Tutorial

VBA Class Initialisierung mit Fehlerprüfung


Schritt-für-Schritt-Anleitung

Um eine Klasse in Excel VBA zu initialisieren und gleichzeitig Fehler zu prüfen, kannst Du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Erstelle ein Klassenmodul:

    • Öffne den VBA-Editor, gehe zu "Einfügen" und wähle "Klassenmodul". Nenne es beispielsweise Klasse1.
  2. Definiere eine private Variable und die Initialize-Methode:

    Option Explicit
    Private mblnIsValid As Boolean
    
    Private Sub class_initialize()
       Dim xy As Double
       On Error GoTo ErrHandler
       xy = 2 / 0 ' Fehler: Division durch Null
       mblnIsValid = True
       Exit Sub
    ErrHandler:
       mblnIsValid = False
    End Sub
  3. Füge eine ReadOnly-Eigenschaft für die Validität hinzu:

    Public Property Get IsValid() As Boolean
       IsValid = mblnIsValid
    End Property
  4. Verwende die Klasse in einem Standardmodul:

    Sub Test()
       Dim class1 As Klasse1
       Set class1 = New Klasse1
       MsgBox class1.IsValid ' Gibt True oder False aus
       Set class1 = Nothing
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Division durch Null:

    • Dieser Fehler tritt auf, wenn Du versuchst, durch Null zu dividieren. Sorge dafür, dass Du vor der Division den Teiler überprüfst.
  • Klasse wird nicht initialisiert:

    • Wenn die Klasse nicht richtig initialisiert wird, überprüfe, ob die On Error-Anweisung korrekt implementiert ist und keine weiteren Fehler im Code vorhanden sind.

Alternative Methoden

Wenn Du die Fehlerprüfung bei der Initialisierung Deiner Excel VBA Klasse anders gestalten möchtest, kannst Du folgende Alternativen in Betracht ziehen:

  • Verwendung von Try...Catch (in neueren VBA-Versionen):

    • Du kannst versuchen, Fehler mithilfe von Try...Catch zu handhaben, um eine elegantere Fehlerbehandlung zu erreichen.
  • Verwendung von booleschen Variablen:

    • Wie bereits im Thread erwähnt, kannst Du eine boolesche Variable in der Klasse definieren, die den Status der Initialisierung speichert.

Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie Du die Klasse und die Fehlerprüfung in einer praktischen Anwendung verwenden kannst:

Sub Test()
    Dim class1 As Klasse1
    Set class1 = New Klasse1

    If Not class1.IsValid Then
        MsgBox "Die Klasse konnte nicht initialisiert werden!"
    Else
        MsgBox "Die Klasse wurde erfolgreich initialisiert!"
    End If

    Set class1 = Nothing
End Sub

In diesem Beispiel wird überprüft, ob die Initialisierung der Klasse1 erfolgreich war, und eine entsprechende Nachricht wird ausgegeben.


Tipps für Profis

  • Verwende Debug.Print: Nutze Debug.Print, um Fehlerprotokolle in der Immediate Window auszugeben. So kannst Du leichter nachvollziehen, wo ein Fehler aufgetreten ist.

  • Vermeide zu viele Fehlerbehandlungen: Halte Deine Fehlerbehandlung einfach und zielgerichtet. Zu viele On Error-Anweisungen können den Code unübersichtlich machen.

  • Dokumentiere Deine Klassen: Schreibe Kommentare in Deinen Code, um die Funktionsweise der Klasse und der Fehlerbehandlung zu erläutern. Dies macht es einfacher für Dich und andere, den Code zu verstehen.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Klasse immer gültig ist?
Verwende eine boolesche ReadOnly-Eigenschaft in Deiner Klasse, die den Status der Initialisierung anzeigt.

2. Was passiert, wenn ich einen Fehler in der class_initialize-Methode habe?
Der Fehler wird von der On Error-Anweisung abgefangen, und Du kannst die boolesche Variable mblnIsValid auf False setzen, um anzuzeigen, dass die Initialisierung fehlgeschlagen ist.

3. Kann ich mehrere Fehlerprüfungen in der class_initialize-Methode durchführen?
Ja, Du kannst mehrere On Error-Anweisungen verwenden oder verschiedene Bedingungen in Deiner class_initialize-Methode abfragen, um mehrere Fehlerquellen zu berücksichtigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige