|
Neben den drei bekannten und dokumentierten Möglichkeiten,
Objekt-Variablen zu deklarieren und Objekte zu instanzieren, gibt es
noch eine weitere, nicht dokumentierte, aber eigentlich
offensichtliche Möglichkeit.
Die drei bekannten Möglichkeiten sind:
Dim ObjectVar As New IrgendEinObjekt
ObjectVar.IrgendEineMethodeOderEigenschaft
oder
Dim ObjectVar As IrgendEinObjekt
Set ObjectVar = New IrgendEinObjekt
ObjectVar.IrgendEineMethodeOderEigenschaft
oder
Dim ObjectVar As IrgendEinObjekt
Set ObjectVar = CreateObject("Library.IrgendEinObjekt")
ObjectVar.IrgendEineMethodeOderEigenschaft
Die erste dieser drei Varianten ist besonders geeignet, wenn Sie
eine Objekt-Instanz nur einmal, vorübergehend und lokal innerhalb
einer Prozedur benötigen (siehe zum Beispiel "Einschalten
und vergessen"). Mit der Deklaration "...
As New ..." lauert das Objekt gewissermaßen in
Wartestellung und wird bei der ersten Verwendung, d.h. beim ersten
Aufruf einer Methode oder Eigenschaft des Objekts, voll zum Leben
erweckt. Die so ins Leben gerufene Instanz bleibt so lange erhalten,
wie der aktuelle Gültigkeitsbereich gilt (die Prozedur, in der die
Deklaration erfolgte, bearbeitet wird), oder bis die Objekt-Variable
ausdrücklich auf Nothing gesetzt wird.
Die vierte, oben angedeutete Variante begrenzt die Lebensdauer
eines Objekt-Instanz noch weiter und gezielter. Und sie erübrigt
sogar die Deklaration einer Objekt-Variablen (sogar trotz Vorgabe
von Option Explicit). Sie beruht auf dem With...End With-Konstrukt:
With New IrgendEinObjekt
' ... beliebiger anderer Code
.IrgendEineMethodeOderEigenschaft
.NochEineMethodeOderEigenschaft
' ... beliebiger anderer Code
.AndereMethodeOderEigenschaft
' ... beliebiger anderer Code
End With
Mit der Instanzierung durch New in Verbindung mit With wird die
Instanz ins Leben gerufen - und deren Leben endet unwiderruflich mit
End With. Selbstverständlich funktioniert das auch mit
der Instanzierung durch CreateObject:
With CreateObject("Library.IrgendEinObjekt")
' ... beliebiger anderer Code
.IrgendEineMethodeOderEigenschaft
.NochEineMethodeOderEigenschaft
' ... beliebiger anderer Code
.AndereMethodeOderEigenschaft
' ... beliebiger anderer Code
End With
Der einzige Nachteil dieser Art der Instanzierung ist, dass Sie
das Objekt nicht als Parameter für innerhalb des With...End
With-Konstrukts aufgerufene Prozeduren übergeben, es
anderweitig an irgendwelche Eigenschaften oder Objekt-Variablen
zuweisen oder es in Collections usw. einfügen können.
|