Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
892to896
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
892to896
892to896
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Klasse als Parameter übergeben

Klasse als Parameter übergeben
09.08.2007 11:16:06
Jan
Hallo zusammen,
folgendes System:
XP, Excel 2000, VBA 6
folgendes Problem:
ich habe eine Klasse namens "Risikoasset" und eine Klasse namens "Portfolio".
In der Klasse Portfolio sind unter anderem eine Sub-Routine namens "AddRisikoasset" sowie eine Collection "allMyRisikoassets" definiert. Die Routine sieht wie folgt aus:

Public Sub AddRisikoasset(asset_ as Risikoasset)
allMyRisikoassets.Add asset_
End Sub


Sobald ich aber versuche die Routine aufzurufen (egal ob aus Portfolio oder irgendeiner anderen Klasse heraus) und ihr ein tatsächliches Risikoasset-Objekt übergebe, bekomme ich die Fehlermeldung "Laufzeitfehler 438, Objekt unterstützt diese Eigenschaft oder Methode nicht".
Probier schon seit geraumer Zeit das hinzubekommen. Was übersehe ich hier? Ich könnte natürlich die Collection in einem normalen Modul Public deklarieren und dann die Risikoassets direkt hinzufügen, das funktioniert, aber ich würde das aus Encapsulation Gründen lieber innerhalb der Portfolio-Klasse belassen.
Besten Dank und beste Grüße,
Jan

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Klasse als Parameter übergeben
09.08.2007 11:21:00
Peter
Hallo Jan,
kann es sein, dass Excel/VBA sich an dem Unterstrich am Ende von asset_ stört?
Gruß Peter

AW: Klasse als Parameter übergeben
09.08.2007 11:25:26
Jan
Daran liegts leider nicht. Den Unterstrich benutz ich immer um die übergebenen Variablen zu kennzeichnen. Das gibt nur Probleme wenn der am Anfang der Variable steht. Mittendrin oder am Schluss stört es Excel nicht.
Gruß,
Jan

AW: Klasse als Parameter übergeben
09.08.2007 11:26:00
Jan
sorry, hatte vergessen Frage noch offen auszuwählen

AW: Klasse als Parameter übergeben
09.08.2007 11:22:25
Ramses
Hallo
Klassen sind nun nicht gerade mein Fachgebiet.
Dies wird zu einer bestehenden Collection hinzugefügt, daher ein Schuss ins Blaue
Public Sub AddRisikoasset(asset_ as New Risikoasset)
Gruss Rainer

Anzeige
AW: Klasse als Parameter übergeben
09.08.2007 11:29:04
Jan
Das hilft leider auch nicht. Es scheint ein Problem mit der benutzerdefinierten Klasse generell zu sein. Hab gerade nochmal versucht die Risikoasset-Klasse in einen Variant zu packen und dann zu übergeben, aber schon bei der Zuweisung von Risikoasset an Variant fliegt VBA raus. Objektorientiert in VBA ist auf die Dauer schon ein bisschen nervig...
Gruß,
Jan

AW: Klasse als Parameter übergeben
09.08.2007 11:42:09
Jan
Oh Mann. Das ist wohl das absurdeste Problem überhaupt. Hab es jetzt hinbekommen. Man darf die AddRisikoasset Routine nicht mit dem Parameter in Klammern aufrufen, dann geht es. Also anstelle von:
myPortfolio.AddRisikoasset(myRisikoasset)
muss man:
myPortfolio.AddRisikoasset myRisikoasset
schreiben.
Das ist ja unglaublich. Was denken die sich eigentlich, wenn sie bei Microsoft ihre Syntax designen?!?
Beste Grüße,
Jan

Anzeige
AW: Klasse als Parameter übergeben
09.08.2007 12:10:00
Ramses
Hallo
Das hätte wirklich auch mir auffallen sollen :-)
"...Was denken die sich eigentlich, wenn sie bei Microsoft ihre Syntax designen?!?..."
Das ist korrekt
Erwartest du einen Rückgabewert dann muss das Argument in Klammern übergeben werden, wie bei einer Funktion, ansonsten werden die Parameter ohne Klammern übergeben
Option Explicit


Sub Test()
    'Das Ergebnis wird extern berechnet
    'und intern weiterverarbeitet
    'Daher die Übergabe in Klammern
    'Es wird ein Wert zurückgegbene
    If Test2(1) > 1 Then
        MsgBox Test2(1)
    End If
    'Das Ergebnis wird extern berechnet
    'aber extern weiterverarbeitet
    'Es wird kein Wert zurückgegeben
    Test3 1
End Sub

Function Test2(myWert As Integer)
    Test2 = myWert * 2
End Function

Function Test3(myWert As Integer)
    MsgBox myWert * 3
End Function

Gruss Rainer

Anzeige
AW: Klasse als Parameter übergeben
09.08.2007 12:20:00
Jan
Aha! Die Konvention war nicht bekannt. Mal unabhängig davon, finde ich sie aber auch nicht sonderlich sinnvoll. Führt m.E. zu schlechterer Lesbarkeit. Wenn ich mehrere Argumente übergebe wirds m.E. schnell unübersichtlich wenn man keine Klammern drumrum hat (von der asset_:=myRisikoasset-Variante mal ganz zu schweigen), aber gut. Hauptsache es geht :-)
Beste Grüße,
Jan

AW: Klasse als Parameter übergeben
09.08.2007 13:46:00
luschi
Hallo Jan,
oder Du rufst es so auf: Call myPortfolio.AddRisikoasset(myRisikoasset)
Da sind dann Klammern wieder erlaubt.
Gruß von Luschi
aus klein-Paris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige