VBA - Felder eines TYPE's dynamisch lesen.

dallas998

Grünschnabel
Hallo zusammen,
ich habe unter ACCESS / VBA eine Klasse zusammengeschustert.

Sieht im Prinzip so aus:

-----------------------------


' Definition
Dim Satz as Struktur

Types Struktur
Feld1 as String * 5
Feld2 as String * 7
usw.
End Types


So, jetzt möchte ich quasi auf die Felder dynamisch zugreifen.

Also z.B. so:

' Methoden
Public Function SendDatas(Feldname, Feldwert)
Satz.Feldname = Feldwert.
End Function

Ich übergebe also den Namen in der Funktion an die Klasse und die
Funktion schiebt den Feldwert in das betreffende Feld.

Ich könnte das mit einem riesigen Case machen und jedes Feld für sich schreiben aber, da wäre bei 70 Felden hart, und bei einem Anpassen der Struktur hänge ich damit wieder
an.

Weiterhin möchte ich zum Schluß zum Beispiel prüfen, ob alle Felder gefüllt sind, und
keines leer.

Dazu würde ich dann gern über die Felder loopen, und prüfen.

Mein Problem ist, das ich immer auf einzelne Felder zugreifen muß.
Also immer Satz.Feld1, Satz.Feld2 usw.



Ich habe gegoogelt und gesucht, und es auch mit EVAL, For each und probiert, aber
nichts hat funktioniert.

Wie muß ich das also anstellen, das ich die Felder einer Stukur einzelnd von oben nach untern dynamisch lesen kann/schreiben kann?

Geht das überhaupt ?

Bitte um Hilfe.

Vielen Dank.

Dallas
 
Was genau funktioniert nicht an For Each?
Ich wuerde mir das so vorstellen

Code:
For Each FelderEinesTyps In ObjectVomTyp 
...

If (IsTypeOf (FelderEinesTyps Is String) Then
....
End If

Counter = Counter +1 
Next
 
Hi,
erstmal danke.
Ich bin bei VBA in einem Klassenmodul (also nicht VB!)
Kannst Du das Coding mal an einem Beispiel festmachen ?

Ich habe das wie o.g

Type Satz

dann die ganzen Felder

End Type

Danach per DIM zugewiesen:
Dim Datensatz As Satz.

Hab das mal so getestet:

For eacht Feld in Datensatz
msgbox Feld
next

Fehler beim Kompilieren
For each kann nur zum Durchlaufen einer Auflistung oder eines Datenfeldes verwendet werden.

Das klappt somit nicht.

Gruß

Dallas
 
ok gerade in der Hilfe gelesen:

You can't use the For...Each...Next statement with an array of user-defined types because a Variant can't contain a user-defined type.

Soweit ich gesehen hab kann man die Typen nicht mal in Collections packen :(

Da bin ich ratlos :confused:
 
Es ging ja explizit um einen Benutzerdefinierten Typ und nicht um eine Klasse an sich. :eek:

Ich setze noch was drauf:
Der benutzerdefinierte Typ ist bestandteil der Klasse.

Betrifft somit beides.

Naja, ich habe das Problem jetzt mit einem 88iger Case gelöst.
Macht den Quellcode nicht wirklich besser.

Also bitte, bitte, wenn noch jemand eine Idee dazu hat: Bitte posten.

Vielen Dank.
 
Da man jeden Typ wie schon beschrieben ja auch als Klasse schreiben kann (kann ja ganz simple sein ) und diese ja dann auch in einer Aufgesetzen Klasse benutzen kann wäre eine saubere Lösung
Hauptklasse mit einer Collection in der die Unterklassen abgelegt sind

Grüsse bb
 
Da man jeden Typ wie schon beschrieben ja auch als Klasse schreiben kann (kann ja ganz simple sein ) und diese ja dann auch in einer Aufgesetzen Klasse benutzen kann wäre eine saubere Lösung
Hauptklasse mit einer Collection in der die Unterklassen abgelegt sind

Grüsse bb

Hi Brain :-)

da ich mit OO erst anfange, wäre eine kleines Beispiel nicht schlecht.

Du würdest also eine Collection als eigene Klasse bauen ?
Mir ist nicht klar, wie ich in VBA eine Klasse in einer Klasse definiere.

Danke & Gruß
Dallas
 
Zurück