Veröffentlicht 10. März 201015 j 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?
10. März 201015 j 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
10. März 201015 j 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
10. März 201015 j 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
11. März 201015 j 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
11. März 201015 j Hallo, ja danke das set war die Lösung. Weiß auch jemand warum? Normalerweise benutze ich set ja nur für Objekte...
11. März 201015 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.