Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
952to956
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
952to956
952to956
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Klassen Eigenschaft dynamisch abfragen

Klassen Eigenschaft dynamisch abfragen
21.02.2008 16:17:00
Samuel
Liebe Excel-Freunde,
ich habe eine neue Knobel-Aufgabe für Euch. Könnt Ihr mir dabei helfen?
Definiert sind folgende zwei Klassen:
'************************************************
clsAdressen

'************************************************
Option Explicit
Public mcolAdressen As Collection

Private Sub Class_Initialize()
Set mcolAdressen = New Collection
End Sub



Private Sub Class_Terminate()
Set mcolAdressen = Nothing
End Sub


'************************************************
clsDataSource

'************************************************
Option Explicit
Public mFile_name, mSource_Sheet As String
Public mKEY_Column, mNAME_Column, mVALUE_Column As Integer


Private Sub Class_Initialize()
End Sub



Private Sub Class_Terminate()
End Sub


'************************************************
'Und im normalen Modul folgende Prozedur:
'************************************************
Option Explicit
Public DataSource_KEY As String
Private objAdressen As clsAdressen
Private objDataSource As clsDataSource
Sub Klassen_Test()
Dim i As Integer
Dim x As Variant
Dim y As Variant
Set objAdressen = New clsAdressen
For i = 1 To 3
Set objDataSource = New clsDataSource
DataSource_KEY = "KEY_WORD" & i
objDataSource.mFile_name = "Test-Dateiname" & i
objDataSource.mSource_Sheet = "Test-Blatt" & i
objDataSource.mKEY_Column = i
objDataSource.mNAME_Column = i + 1
objAdressen.mcolAdressen.Add objDataSource, DataSource_KEY
'Zugriff per Schlüssel funktioniert problemlos:
x = objAdressen.mcolAdressen("Key_WORD" & i).mFile_name
MsgBox (x)
'Jetzt möchte ich aber die abgefragte Eigenschaft variabel gestalten:
y = InputBox("Gefragte Eigenschaft:", "Eigenschaft", "mFile_name")
x = objAdressen.mcolAdressen("Key_WORD" & i).y ' MsgBox (x)
Next i
End Sub


Das funktioniert so natürlich noch nicht.
Aber wie kann man die Eigenschaft dynamisch abfragen?
Bin Euch für jede Hilfe dankbar!
Grüße,
Samuel Schwalbe

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Klassen Eigenschaft dynamisch abfragen
21.02.2008 17:28:06
Nepumuk
Hallo Samuel,
na einfach so:
x = CallByName(objAdressen.mcolAdressen("Key_WORD" & i), y, VbGet)

Die Deklarationen der Klasse clsDataSource sind nicht sauber. Mit:
Public mFile_name, mSource_Sheet As String

wird mSource_Sheet als String, aber mFile_name als Variant deklariert. Richtig wäre es so:
Public mFile_name As String, mSource_Sheet As String

Und richtig gekapselt sind deine Klassen auch nicht. Alles Public, macht man nicht, dafür gibt es die Property - Prozeduren. So nach der Art:
' **********************************************************************
' Modul: clsDataSource Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private mstrFile_Name As String, mobjSeet As Worksheet

Friend Property Get prpFileName() As String
    prpFileName = mstrFile_Name
End Property

Friend Property Let prpFileName(ByVal strNewFileName As String)
    mstrFile_Name = strNewFileName
End Property

Friend Property Set prpSetSheet(ByVal objSheet As Worksheet)
    Set mobjSeet = objSheet
End Property

Gruß
Nepumuk

Anzeige
AW: Klassen Eigenschaft dynamisch abfragen
21.02.2008 17:58:47
Samuel
Hallo Nepumuk,
vielen vielen Dank!!!!
Das funktioniert ja super.

Die vielen Property Get/let Prozeduren hatte ich auch erst im Original eingebaut und dann beim Testen festgestellt, daß man die ja gar nicht unbedingt braucht. Da im Original große Datenmengen verarbeitet werden, dachte ich, ich könnte damit den Ablauf verschlanken/beschleunigen.
Habe ich mir damit einen Nachteil eingebaut?

Vielen Dank für Deine schnelle geniale Lösung!

Grüße
Samuel

AW: Klassen Eigenschaft dynamisch abfragen
21.02.2008 18:14:59
Nepumuk
Hallo Samuel,
es wäre halt "sauber" programmiert.
Für die Verarbeitung von großen Datenmengen eine Klasse zu bemühen ist an sich schon etwas fragwürdig, denn jedes Mal, wenn die Klasse angesprochen wird, wird sie neu in den Stackframe geladen und das kostet natürlich seine Zeit.
Außerdem ist das Collectionobjekt auch nicht gerade das schnellste.
Ich würde für so etwas eher zum Dictionary-Objekt oder ein ArrayList-Objekt greifen. Beim ersten komme ich nachträglich an die Keys ran und das zweite bietet schon von Haus aus Methoden wie Contains oder Sort an.
Aber, ein benutzerdefinierter Datentyp in einem dynamischen Array ist trotzdem wesentlich schneller.
Gruß
Nepumuk

Anzeige
AW: Klassen Eigenschaft dynamisch abfragen
21.02.2008 18:44:00
Samuel
Hallo Nepumuk,
ja da hast Du recht - ich hatte bislang nie die Klassen in VBA benötigt und da ich dachte so eine "objektorientierte"-Lösung wäre schneller als normale Array habe ich's halt mal probiert. Und es funktioniert dank Deiner Hilfe jetzt auch ganz gut.
Die Performance wird sich in der Praxis noch zeigen. Im Test kam es mir nicht so optimal vor.
Vielen Dank!
Samuel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige