Benutzerdefinierte Typen in VBA Collections verwenden
Schritt-für-Schritt-Anleitung
Um benutzerdefinierte Typen in VBA Collections zu verwenden, folge diesen Schritten:
-
Erstelle ein Klassenmodul für deinen benutzerdefinierten Typ. In unserem Beispiel nennen wir die Klasse clsFahrzeug
.
' Klassenmodul: clsFahrzeug
Option Explicit
Public FarbCode As Integer
Public Hersteller As String
Public Typ As String
-
Erstelle ein weiteres Klassenmodul für die Collection, beispielsweise clsFahrzeuge
.
' Klassenmodul: clsFahrzeuge
Option Explicit
Private fahrzeugliste As Collection
Private Sub Class_Initialize()
Set fahrzeugliste = New Collection
End Sub
Public Sub add(fahrzeug As clsFahrzeug)
fahrzeugliste.Add fahrzeug
End Sub
Public Sub show(index As Integer)
Dim f As clsFahrzeug
Set f = fahrzeugliste(index)
With f
Debug.Print .Hersteller
Debug.Print .FarbCode
Debug.Print .Typ
End With
End Sub
-
Verwende die Klassen in einem Modul:
' Modul: modTest
Option Explicit
Sub test_clsFahrzeuge()
Dim fahrzeug As clsFahrzeug
Dim fahrzeuge As clsFahrzeuge
Set fahrzeug = New clsFahrzeug
Set fahrzeuge = New clsFahrzeuge
With fahrzeug
.FarbCode = 1
.Hersteller = "Mercedes"
.Typ = "LKW"
End With
fahrzeuge.add fahrzeug
fahrzeuge.show (1)
End Sub
Häufige Fehler und Lösungen
Ein häufiger Fehler, den Du beim Arbeiten mit benutzerdefinierten Typen in Collections vermeiden solltest, ist die Verwendung von benutzerdefinierten Typen, die nicht in öffentlichen Objektmodulen definiert wurden. Um diesen Fehler zu beheben:
- Verwende Klassenmodule anstelle von benutzerdefinierten Typen. So kannst Du Objekte in einer Collection speichern, ohne auf Fehler zu stoßen.
Falls Du dennoch eine Fehlermeldung erhältst, die besagt, dass der Typ nicht in eine Variant konvertiert werden kann, überprüfe, ob Du in Deinem Code den richtigen Datentyp verwendest.
Alternative Methoden
Wenn Du keine Klassenmodule verwenden möchtest, kannst Du auch Arrays oder Dictionary-Objekte verwenden, um komplexe Datentypen zu speichern. Beispiel für die Verwendung von Dictionary:
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "Fahrzeug1", Array("Mercedes", 1, "LKW")
Diese Methode ist jedoch nicht so strukturiert wie Klassen und kann weniger Übersichtlichkeit bieten.
Praktische Beispiele
Hier ist ein praktisches Beispiel, das die Verwendung von benutzerdefinierten Typen in einer Collection zeigt:
Sub Beispiel()
Dim fahrzeug As clsFahrzeug
Dim fahrzeuge As clsFahrzeuge
Set fahrzeug = New clsFahrzeug
Set fahrzeuge = New clsFahrzeuge
With fahrzeug
.FarbCode = 2
.Hersteller = "BMW"
.Typ = "PKW"
End With
fahrzeuge.add fahrzeug
fahrzeuge.show (1)
End Sub
Dieses Beispiel zeigt, wie Du ein Fahrzeugobjekt erstellen und in einer Collection speichern kannst.
Tipps für Profis
- Nutze die Option Explicit Anweisung in jedem Modul, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
- Dokumentiere Deine Klassen und Methoden mit Kommentaren, um die Wartbarkeit Deines Codes zu verbessern.
- Experimentiere mit Eigenschaften und Methoden in Deinen Klassen, um den Code flexibler zu gestalten.
FAQ: Häufige Fragen
1. Kann ich benutzerdefinierte Typen in einer normalen Collection speichern?
Nein, um benutzerdefinierte Typen in einer Collection zu speichern, musst Du Klassenmodule verwenden.
2. Was ist der Unterschied zwischen einem benutzerdefinierten Typ und einer Klasse?
Ein benutzerdefinierter Typ ist eine einfache Datenstruktur, während eine Klasse Methoden und Eigenschaften enthält, die komplexere Logik ermöglichen.
3. Wie kann ich auf die Elemente in einer Collection zugreifen?
Du kannst die Item
-Methode oder den Index verwenden, um auf Elemente in einer Collection zuzugreifen, wie im Beispiel gezeigt.