Eigener Datentyp und ARRAY in Excel VBA
Schritt-für-Schritt-Anleitung
Um Daten eines eigenen Datentyps in ein Array in Excel VBA zu speichern, kannst du die folgenden Schritte befolgen:
-
Definiere deinen Datentyp:
Type Artikel
Bezeichnung As String
Preis As Currency
End Type
-
Erstelle ein Array:
Dim DatenFeld(1 To 3) As Artikel
-
Fülle das Array in einer Subroutine:
Sub Macro()
Dim a As Artikel
a.Bezeichnung = "PC"
a.Preis = 333.5
DatenFeld(1) = a
MsgBox DatenFeld(1).Bezeichnung
MsgBox DatenFeld(1).Preis
End Sub
-
Führe die Subroutine aus: Drücke F5
oder klicke auf Run
, um die Werte in der MsgBox anzuzeigen.
Häufige Fehler und Lösungen
Ein häufiger Fehler, den viele Benutzer erleben, ist der Versuch, einen benutzerdefinierten Typ direkt in ein Variant-Array zuzuweisen. Dies führt zur Fehlermeldung:
"Nur benutzerdefinierte Typen, die in öffentlichen Objektmodulen definiert wurden, können in den oder aus dem Typ Variant umgewandelt werden."
Lösung: Stelle sicher, dass das Array den benutzerdefinierten Typ direkt enthält. Anstelle eines Variant-Arrays solltest du ein Array des Typs Artikel
definieren, wie im Beispiel oben.
Alternative Methoden
Wenn du mit Arrays arbeiten möchtest, aber einen benutzerdefinierten Typ nicht verwenden kannst oder möchtest, kannst du folgende Alternativen in Betracht ziehen:
-
Verwende separate Arrays für jede Eigenschaft:
Dim Bezeichnungen(1 To 3) As String
Dim Preise(1 To 3) As Currency
-
Nutze Collections: Du kannst auch Collection
-Objekte verwenden, um Daten flexibler zu speichern.
Dim ArtikelSammlung As New Collection
ArtikelSammlung.Add a
Praktische Beispiele
Hier sind einige praktische Beispiele, wie du mit benutzerdefinierten Datentypen und Arrays in Excel VBA arbeiten kannst:
-
Füge mehrere Artikel hinzu:
Sub Macro()
Dim a As Artikel
Dim i As Integer
For i = 1 To 3
a.Bezeichnung = "Artikel " & i
a.Preis = i * 100
DatenFeld(i) = a
Next i
For i = 1 To 3
MsgBox DatenFeld(i).Bezeichnung & ": " & DatenFeld(i).Preis
Next i
End Sub
-
Verwende MsgBox für die Ausgabe: Die Verwendung von MsgBox
erleichtert das Testen deiner Werte.
Tipps für Profis
- Verwende öffentliche Module: Wenn du benutzerdefinierte Typen in verschiedenen Modulen verwenden möchtest, definiere sie in einem öffentlichen Modul.
- Dokumentiere deinen Code: Halte deinen Code sauber und gut dokumentiert, um die Wartbarkeit zu erhöhen.
- Fehlerbehandlung einbauen: Nutze
On Error GoTo
, um potenzielle Fehler zu erfassen und zu behandeln.
FAQ: Häufige Fragen
1. Kann ich ein Array von Variants verwenden?
Ja, aber du musst darauf achten, dass du keine benutzerdefinierten Typen direkt in ein Variant-Array übergibst. Nutze stattdessen ein Array deines benutzerdefinierten Typs.
2. Wie kann ich die Größe eines Arrays ändern?
Verwende die ReDim
-Anweisung, um die Größe eines Arrays zur Laufzeit zu ändern:
ReDim DatenFeld(1 To 5) As Artikel
3. Was ist der Unterschied zwischen Type und Class?
Ein Type
ist eine einfache Struktur, während eine Class
Objekte mit Methoden und Eigenschaften definiert. Für komplexere Anwendungen ist eine Klasse oft die bessere Wahl.