# VBA - Felder eines TYPE's dynamisch lesen.



## dallas998 (18. Dezember 2007)

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


----------



## ironmonkey2 (18. Dezember 2007)

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


```
For Each FelderEinesTyps In ObjectVomTyp 
...

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

Counter = Counter +1 
Next
```


----------



## dallas998 (18. Dezember 2007)

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


----------



## ironmonkey2 (19. Dezember 2007)

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


----------



## Alex F. (19. Dezember 2007)

Aber mit Klassen kann man das !

Grüsse bb


----------



## ironmonkey2 (19. Dezember 2007)

Es ging ja explizit um einen Benutzerdefinierten Typ und nicht um eine Klasse an sich.


----------



## dallas998 (19. Dezember 2007)

ironmonkey2 hat gesagt.:


> Es ging ja explizit um einen Benutzerdefinierten Typ und nicht um eine Klasse an sich.



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.


----------



## Alex F. (20. Dezember 2007)

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


----------



## dallas998 (20. Dezember 2007)

brainbyte hat gesagt.:


> 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


----------

