Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
636to640
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
636to640
636to640
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Type geschickt abspeichern?

Type geschickt abspeichern?
20.07.2005 10:50:55
Philipp
Hallo Forum,
ich habe hätte da mal ein Problem in VBA:
Ich habe ein Produkt, das verschiedene Eigenschaften hat, die in Hierarchiebeziehungen zueinander stehen.
Beispiel:
Produkt A:
- Name
- Herstelldatum
- Farbe:
-- gelb
-- rot
-- blau:
--- hellblau
--- dunkelblau
-Hersteller:
-- Firma A
-- Firma B
usw.
Ich denk es ist klar geworden, was ich meine.
Diese Datenstruktur möchte ich mit Type-Objekten abbilden (oder gibt es was besseres?). Ein Type Prudukt A besteht also aus den Variablen Name, Herstelldatum, ... und wiederum Types für Farbe, Hersteller ,... (beispielhaft).
Jetzt stellt sich mir die Frage:
Wie kann ich eine solche Datenstruktur abspeichern, so dass ich sie jederzeit problemlos wieder einlesen kann. Ich möchte sie also nach Möglichkeit nicht in einer Excel- oder Text-Datei speichern, sondern am liebsten das Type-Objekt an sich. Geht das? Wenn ja, wie? Fall nein, was schlagt ihr für eine Alternative vor?
Vielen Dank schonmal im Voraus!
Viele Grüße,
Philipp

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Type geschickt abspeichern?
20.07.2005 11:24:53
Nepumuk
Hi,
Variablen können sich nichts merken, wenn die Mappe geschlossen wird. Du hast in Excel zwei Möglichkeiten Daten zu speichern. 1. In einer Tabelle und 2. Ein Array unter einem Namen. Das Array ist aber A. auf numerische Werte vom Typ Long beschränkt und kann B. nur 5.460 Einträge aufnehmen. Also, wird sich wohl eine Tabelle, die kann ja ruhig ausgeblendet sein (Eigenschaftsfenster - xlSheetVeryHidden), anbieten.
Gruß
Nepumuk
Excel & VBA – Beispiele
soo umständlich
20.07.2005 11:37:02
Philipp
Hallo Nepumuk ("Hallo Spencer"-Fan? :0),
vielen Dank für deine Hilfe. Das ganze Ding in einer Tabelle abzuspeichern habe ich schon so als Notlösung im Hinterkopf, will es aber möglichst vermeiden. Das Problem ist, dass ich die ganzen Daten einlese, um darauf Auswertungen zu fahren, da es recht viele sind und Berechungen auf Tabellenblättern mehrere Minute dauern (trotz ausgeschalteter Bildschirmaktualisierung, recht effizienten Methoden, ... und obwohl ich erst einen Bruchteil der Daten aufgenomman habe). Ich möchte die Datenstruktur also so, wie sie ist ablegen und jederzeit wieder einlesen können. Wenn ich alles in ein Tabellenblatt schreibe, muss ich mir überlegen, wie ich die komplexe Struktur auf Blättern verteile, das schreiben und dann zusätzlich noch eine Methode, wie ich die Tabellenblätter wieder in die Type-Datenstruktur zurückbekommen, um weitere Auswertungen zu fahren. Ist also ne Menge unnötige Arbeit, wenn man bedenkt, dass ich die Tabellenblätter nur als Speicherlösung verwende und sonst nix mit denen anstelle.
Gibt es denn da wirklich keine andere Möglichkeit einen Type so wie er ist (oder anders aber auf alle Fälle einfach) zu speichern?
Anzeige
AW: Type geschickt abspeichern?
20.07.2005 11:55:39
MichaV
Hi Ihrs,
ich denke, es geht schon, wenn ich Dich richtig verstanden habe:


      
Option Explicit
'Benutzerdefiniertes Datenfeld erstellen
Private Type v2
  Nam 
As String
  Datum 
As String
  Wert 
As String
End Type
Private Type v1
  Element(1 
To 2) As v2
  WasWeißIch 
As String
End Type
Dim Variable(1 To 10) As v1
Sub TypeSpeichern()
'Füllen
With Variable(5)
  .Element(1).Nam = "Name1"
  .Element(1).Datum = "Datum1"
  .Element(1).Wert = "Wert1"
  .Element(2).Nam = "Name2"
  .Element(2).Datum = "Datum2"
  .Element(2).Wert = "Wert2"
  .WasWeißIch = "Versuch"
End With
'Speichern
Open "e:\privat\dat.dat" For Binary As #1
Put #1, , Variable
Close #1
'Löschen
Erase Variable
With Variable(5)
  MsgBox .Element(1).Nam
  MsgBox .Element(2).Datum
  MsgBox .WasWeißIch
End With
'Laden
Open "e:\privat\dat.dat" For Binary As #1
Get #1, , Variable
Close #1
'Anzeigen
With Variable(5)
  MsgBox .Element(1).Nam
  MsgBox .Element(2).Datum
  MsgBox .WasWeißIch
End With
End Sub 


Gruss- Micha
Anzeige
AW: Type geschickt abspeichern?
20.07.2005 12:51:20
Philipp
Hallo Micha,
ich habe es zwar jetzt noch nicht ausprobiert, aber es sieht super aus. Genau so eine einfach Lösung habe ich gesucht. Ich werd das mal probieren, wird aber wohl noch ein paar Tage dauern, bis ich mit dem Tool soweit bin. Falls es nicht klappt, dann melde ich mich nochmal :0).
Vielen Dank!
Gruß,
Philipp
AW: Type geschickt abspeichern?
20.07.2005 13:11:19
MichaV
Hi,
ja, ist erschreckend einfach. Danke für die Rückmeldung!
Gruss- Micha
AW: Type geschickt abspeichern?
20.07.2005 15:40:09
Nepumuk
Hi,
ich würde dir sowieso von einem benutzerdefinierten Datentyp abraten. Viel zu umständich. Benutze ein Variantarray Das benötigt zwar mehr Speicher, aber wenn du mehr wie 256 MB hast, kannst du ein paar 100.000 Zeilen anlegen. Das einlesen und speichern ist dann eine einzige Anweisung. Beispiel:
Option Explicit

Public Sub schreiben()
    Dim varArray(1 To 10000, 1 To 6) As Variant '10.000 Zeilen 6 Spalten
    Dim intIndex As Integer
    For intIndex = 1 To 10000 'mit testdaten füllen
        varArray(intIndex, 1) = "ABC " & CStr(intIndex)
        varArray(intIndex, 2) = Date
        varArray(intIndex, 3) = Time
        varArray(intIndex, 4) = Now
        varArray(intIndex, 5) = "gelb"
        varArray(intIndex, 6) = CStr(intIndex)
    Next
    Worksheets(1).Range(Cells(1, 1), Cells(10000, 6)) = varArray 'in tabelle schreiben
End Sub

Public Sub lesen()
    Dim varArray As Variant
    varArray = Worksheets(1).Range(Cells(1, 1), Cells(10000, 6))
End Sub

Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
AW: Type geschickt abspeichern?
20.07.2005 16:20:07
MichaV
Hi,
naja, ist Ansichtssache. Du kannst mit Nepumuks Variante die Unterelemente natürlich viel besser ansprechen und die Daten können bei Weitergabe der Excel- Tabelle nicht verloren gehen.
Nur der Vollständigkeit halber: Abspeichern würde hier extern genauso einfach gehen wie bei Type-Variablen. Die der auf der Festplatte für die Daten benötigte Speicherplatz ist nur halb so groß wie beim Speichern in der Excel- Datei.
'Speichern
Open "e:\privat\dat.dat" For Binary As #1
Put #1, , varArray
Close #1
'Lesen
Dim varArray(1 To 10000, 1 To 6) As Variant

Open "e:\privat\dat.dat" For Binary As #1
Get #1, , varArray
Close #1

Worksheets(2).Range(Cells(1, 1), Cells(10000, 6)) = varArray 'in tabelle schreiben
Gruss- Micha
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige