Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Eigener Datentyp und ARRAY

Eigener Datentyp und ARRAY
23.04.2009 15:25:27
eres
Zunächst mal einen herzlichen Gruß ins Forum.
Kann mir jemand einen Tipp geben wie ich Daten eines eigenen Datentyps in ein ARRAY schieben kann ?
Beispiel:
Option Explicit
Type Artikel
Bezeichnung As String
Preis As Currency
End Type
Dim DatenFeld(1 To 3) As Variant

Sub Macro()
Dim a As Artikel
a.Bezeichnung = "PC"
a.Preis = 333.5
DatenFeld(0) = a
End Sub


Im Beispiel erhalte ich in der Datenfeldzuweisung DatenFeld(0) = a die Fehlermeldung:
"Nur benutzerdefinierte Typen, die in öffentlichen Objektmodulen definiert wurden, können in den oder aus dem Typ Variant umgewandelt werden, oder an eine zur Laufzeit auflösbare Funktion weitergeleitet werden."
Hintergrund meiner Frage ist die Problemstellung, die hier diskutiert wird und wo von edhunter und Schmitti vorgeschlagen wird, Daten eines eigenen Datentyps in ein eindimensionales Array zu schieben.
Bin für jede Hilfe dankbar.
Gruß
erwin
http://www.digital-inn.de/visual-basic/12467-array-groesse.html

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eigener Datentyp und ARRAY
23.04.2009 16:58:59
Tino
Hallo,
ohne das dazugehörige Element von diesem Datentyp kann es auch nicht gehen.

Type Artikel
Bezeichnung As String
Preis As Currency
End Type
Dim DatenFeld(1) As Variant
Sub Macro()
Dim a As Artikel
a.Bezeichnung = "PC"
a.Preis = 333.5
DatenFeld(0) = a.Bezeichnung
DatenFeld(1) = a.Preis
End Sub


Gruß Tino

Anzeige
AW: Eigener Datentyp und ARRAY
23.04.2009 17:09:29
Reinhard
Hallo Eres,
Dim DatenFeld(1 To 3) As Variant
und
DatenFeld(0) = a
geht schon mal gar nicht *denk*
Ich habe den Link nicht angeklick, wahrscheinlich ist die Lösung von Tino eher was für dich, aber jetzt habe ich hier halt schon meinen Code, vielleicht nützt er dir doch was.

Option Explicit
Type Artikel
Bezeichnung As String
Preis As Currency
End Type
Public DatenFeld(1 To 3) As Artikel
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


Gruß
Reinhard

Anzeige
AW: Eigener Datentyp und ARRAY
24.04.2009 08:59:05
eres
Vielen Dank Tino und Reinhard.
Hatte gestern wohl Tomaten auf den Augen und ein Brett vorm Kopf.
Wünsche Euch ein sonniges Wochenende.
p.s. Nochmals vielen Dank für Euren Einsatz im Forum. Niergends lerne ich soviel wie hier
Gruß aus Köln
erwin
;
Anzeige
Anzeige

Infobox / Tutorial

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:

  1. Definiere deinen Datentyp:

    Type Artikel
       Bezeichnung As String
       Preis As Currency
    End Type
  2. Erstelle ein Array:

    Dim DatenFeld(1 To 3) As Artikel
  3. 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
  4. 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:

  1. 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
  2. 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.

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