Warum definiert ein Excel / VBA-Benutzer keine Standardeigenschaft, die einen Bereich zurückgibt, der sich wie ein Bereich verhält?

8

Eine Eigenschaft in einer Excel / VBA-Klasse, die ich schreibe, gibt einen Bereich zurück. Ich habe es zur Standardeigenschaft für die Klasse gemacht, indem ich die in Ссылка beschriebene Technik verwende. Ich erwartete, alle integrierten Eigenschaften und Methoden der Range-Klasse mit Objekten meiner Klasse zu verwenden, ohne die Eigenschaft explizit anzugeben. Es funktioniert nicht. Hier sind ein paar viel einfachere Klassen zu illustrieren. (Diese Auflistungen sind die exportierte Quelle, die mit einem Texteditor angezeigt wird, da der VBA-Editor die Attribute-Anweisungen versteckt.)

%Vor%

Hier ist ein Sub in einem normalen Modul zum Instanziieren und Testen der Klassen. Die Kommentare zeigen an, was passiert, wenn ich einen Schritt durchmache:

%Vor%

Warum verhält sich DefRange in Anweisung (5) nicht genauso wie DefRange.DefProp in Anweisung (4)?

Wenn ich die Aussage (5) zu:

ändere %Vor%

Der Compiler wählt ".Cells", sagt "Kompilierfehler: Methode oder Datenelement nicht gefunden" und stoppt, so dass das Problem im Objektmodell liegt - nicht nur etwas, das zur Laufzeit versagt. Mache ich etwas falsch? Oder ist es nicht möglich, eine Standardeigenschaft zu haben, die einen Bereich zurückgibt? Wie wäre es mit anderen integrierten Klassen? Benutzerdefinierte Klassen?

    
SVanDee 16.12.2012, 02:14
quelle

1 Antwort

5
%Vor%

Es sieht so aus, als würden Sie die Standardeigenschaften verketten und es wird nicht funktionieren. Sie können die Standardeigenschaft nur aus dem von Ihnen bereitgestellten Objekt ziehen. In diesem Fall geben Sie ein Bereichsobjekt zurück, das nicht gedruckt werden kann. VBA wird nicht auf die nächste Ebene gehen, um festzustellen, ob die Standardeigenschaft ein Objekt zurückgibt und ob dieser Objekttyp über eine Standardeigenschaft verfügt. Ich nehme an, wenn dies der Fall wäre, könnten Sie eine Endlosschleife erstellen - zwei Objekte, die jeweils das Ergebnis der Standardeigenschaft des anderen sind.

%Vor%

Keine Standardeigenschaft fügt sich in eine Punktkette ein. Ich nehme an, das liegt daran, wenn DefRange eine eigene Cells-Eigenschaft hätte, welche würde sie verwenden? Ich kann mir keine Objekte im Excel-Modell vorstellen, die sich so verhalten. Sie können dies verwenden

%Vor%

Dies scheint ein Beispiel für die Verkettung von Standardeigenschaften zu sein, von dem ich sagte, dass es dies nicht tun würde. Ich denke, dass (1,1) genug ist, um die Kette erneut zu starten. DefRange gibt ein Bereichsobjekt zurück, (1,1) gibt ein Bereichsobjekt zurück, und die Value (default) -Eigenschaft wird zurückgegeben.

Interessante Frage. Ich frage mich, ob das Standardeigenschaftsmerkmal absichtlich auf diese Weise erstellt wurde oder ob es genau so funktioniert hat.

    
Dick Kusleika 17.12.2012, 15:51
quelle

Tags und Links