wulfgang Geschrieben 10. März 2010 Geschrieben 10. März 2010 Hallo, ich möchte in VBA ein Array mit Objekten füllen. Leider erhalte ich immer für die Zeile Liste(x) = Class1Objekt die folgende Fehlermeldung: Run-time error '91' Object variable or With block variable not set Mein Modul: Sub Test() Dim Liste(5) As Class1 For x = 1 To 4 Step 1 Dim Class1Objekt As Class1 Set Class1Objekt = New Class1 Liste(x) = Class1Objekt Next End Sub Mein Klassenmodul: Private strName As String Public Property Let NameSet(Argument As String) strName = Argument End Property Public Property Get NameReturn() As String NameReturn = strName End Property Kann mir jemand helfen? Zitieren
mharms Geschrieben 10. März 2010 Geschrieben 10. März 2010 Benutz kein Array sondern eine "Collection". VB-Tec / Objekte / OOP / Collections - Collections besser nutzen mfG Marco edit: seh gerad war nicht ganz das was du wolltest *facepalm* aber vllt hilft es dir ja trotzdem Zitieren
getCppKenntnisse() Geschrieben 10. März 2010 Geschrieben 10. März 2010 Hallo wulfgang, falls du trotz der collection sache bei einem Array bleiben möchtest: Ich glaub es liegt an der deklaration des Arrays, ich denke es sollte eher so aussehen: Dim Liste(0 To 4) As Class1 'oder Dim Liste(1 To 5) As Class1 'Je nachdem wie du deinen Index setzen möchtest Ich hab gerade keine möglichkeit das zu testen, aber ich glaube bei deiner schreibweise wird wirklich nur ein Element mit Index 5 in dem "Array"(wenn man es dann noch so nennen kann ) erzeugt. Und wenn du dann auf Liste(1) zugreifen möchtest sagt er dass es das Objekt Liste(1) nicht gibt (Objektvariable nicht gesetzt) Ich hoffe es hilft. mfg Zitieren
wulfgang Geschrieben 10. März 2010 Autor Geschrieben 10. März 2010 Hallo, also mit Collection geht das ganze wunderbar einfach. Würde das ganze aber gerne auch mit einem Array realisieren. Mein Klassenmodul sieht jetzt so aus: Sub Test() Dim Liste(0 To 4) For x = 1 To 4 Step 1 Dim Class1Objekt As Class1 Set Class1Objekt = New Class1 Liste(x) = Class1Objekt Next End Sub Dann erhalte ich für die Zeile Liste(x) = Class1Objekt die Meldung Run time error 438 Object doesn't support this method or property Zitieren
MartinSt Geschrieben 10. März 2010 Geschrieben 10. März 2010 Nur ausm Kopf und beim Rotwein: versuch mal set Liste(x) = Class1Objekt Zitieren
mharms Geschrieben 11. März 2010 Geschrieben 11. März 2010 Nur ausm Kopf und beim Rotwein: versuch mal set Liste(x) = Class1Objekt Wah das böse set ... da könnte wirklich der Hund begraben liegen...oder so xD Zitieren
wulfgang Geschrieben 11. März 2010 Autor Geschrieben 11. März 2010 Hallo, ja danke das set war die Lösung. Weiß auch jemand warum? Normalerweise benutze ich set ja nur für Objekte... Zitieren
mharms Geschrieben 11. März 2010 Geschrieben 11. März 2010 Dim Liste(5) As Class1 Es ist zwar ein Feld(Array) aber vom Typ Class1. Und diese Klasse ist ein Object. Somit musst du auch das set benutzen. Zitieren
wulfgang Geschrieben 14. März 2010 Autor Geschrieben 14. März 2010 Aber in dem Array befindet sich doch nur ein Verweis auf das Objekt, oder? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.