Objekte beherrschen: Unterschied zwischen den Versionen
Pwania (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Objekte werden uns von den Anwendungen (Word, Excel, PowerPoint etc.) zur Verfügung gestellt oder können vom Entwickler selbst durch eigene Klassen erstellt…“) |
Pwania (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
[[Category:vba-wiki]] | |||
Objekte werden uns von den Anwendungen (Word, Excel, PowerPoint etc.) zur Verfügung gestellt oder können vom Entwickler selbst durch eigene Klassen erstellt werden. | Objekte werden uns von den Anwendungen (Word, Excel, PowerPoint etc.) zur Verfügung gestellt oder können vom Entwickler selbst durch eigene Klassen erstellt werden. | ||
Aktuelle Version vom 28. Januar 2023, 00:39 Uhr
Objekte werden uns von den Anwendungen (Word, Excel, PowerPoint etc.) zur Verfügung gestellt oder können vom Entwickler selbst durch eigene Klassen erstellt werden.
Generelles zu Objekten
Deklaration
Objektvariablen werden wie jede andere Variable deklariert:
Dim myObject as Whatever
Instanziierung
Bevor eine Objektvariable verwendet werden kann, muss sie instanziiert werden. Hierbei erhält die Variable die Adresse des Objektes. Dies erfolgt mit der 'Set'-Anweisung:
Set myObject = Whatever
Anwendungsobjekte stellen ein tatsächlich existierende Elemente (eine Anwendung, ein Dokument, einen Absatz, eine Tabellenzelle, ein Rechteck usw.) dar. Deshalb erfolgt deren Instanziierung NICHT mit dem Schlüsselwort 'New'!
Set docDocument = ActiveDocument
Eigene Klassenobjekte und Dialoge (UserForms) hingegen müssen vor ihrem Einsatz neu erstellt werden, weil sie noch nicht existieren und daher noch keine Objektadresse besitzen. Deshalb erfolgt hierbei die Instanziierung mit dem Schlüsselwort 'New'.
Set myDialog = New frmDialog
Wenn eine bestehende Instanz übernommen wird, also das Objekt von einer Variablen in eine andere Objektvariable kopiert wird, entfällt auf jeden Fall das Schlüsselwort 'New'!
Set myCopy = myOriginal
Objekte prüfen
Die Prüfung, ob eine Objektvariable schon instanziiert wurde, erfolgt mit dem 'Is Nothing'-Vergleich:
If myObject Is Nothing Then Set myObject = New clsObject
Objektreferenzen ausdrücklich zerstören
Objektreferenzen haben den hier beschriebenen Geltungbereich: Variablen: Geltungsbereich, Lebensdauer und Formen der Deklaration.
Sie werden beim Verlassen ihres Geltungsraumes automatisch zerstört. Wenn Sie eine Objektreferenzen explizit zerstören möchten (oder müssen), erfolgt die wie hier beschrieben:
Set myObject = Nothing
Dies kann zum Beispiel sinnvoll sein, wenn Sie einen Dialog wegen einer Fehleingabe neu aufrufen müssen. Wenn Sie 'Set myDialog = Nothing' einsetzen, sind Sie sicher, dass die vorgehende Instanz des Dialogs tatsächlich nicht mehr existiert.
Methoden und Eigenschaften
Die Methoden eines Objektes entsprechen ausführbaren Befehlen, welche am Objekt ausgeführt werden können. Die Eigenschaften entsprechen Einstellungen, welche das Objekt betreffen.
Die Methoden und Eigenschaften eines Objektes sprechen Sie an, indem Sie das Objekt selbst (bei Anwendungsobjekten) oder die Objektvariable mit einem Punkt abschließen und dann die Eigenschaft bzw. die Methode benennen. Der VBA-Editor bietet Ihnen hierzu die Auswahl der Möglichkeiten als Liste an:
Hierbei werden die Methoden wie ein fliegender, grüner Ziegelstein (oder Radiergummi?) und die Eigenschaften wie eine kleine Tabelle, auf die ein Finger zeigt, dargestellt.
Weiterführende Anwendungsobjekte
Eigenschaften können selbst auf weitere (Unter-)Objekte verweisen, welche wiederum eigene Eigenschaften und Methoden besitzen:
Application.ActiveDocument.Words(2).Font.Bold = True
Weiterführende Klassenobjekte
Weiterführende Objekte können auch von eigenen Klassen angeboten werden, indem die Eltern-Klasse eine Funktion anbietet, welche als Rückgabewert eine weitere Klasse verwendet:
In der Klasse 'clsToolsString' finden wir folgende Funktion:
Public Function ListTools() As clsToolsList Set ListTools = New clsToolsList End Function
Somit kann über die 'StringTools' direkt auf die verwandte 'ListTools' zugegriffen werden:
strList = Tools.StringTools.ListTools.AddItemToList(strList, "New Item")
- 'Tools' ist der Name des Moduls, in dem sich die Funktion 'StringTools' befindet, deren Rückgabewert die Klasse 'clsToolsString' ist
- In der Klasse 'clsToolsString' befindet sich eine Funktion 'ListTools' mit dem Rückgabewert 'clsToolsList'
- In der Klasse 'clsToolsList' befindet sich die Funktion 'AddItemToList'
Kurzschreibweise mit With
Sie können die Zuweisung mehrerer Eigenschaften eines Objektes auf folgende Weise übersichtlicher gestalten:
With ActiveDocument.Words(2).Font .Bold = False .Italic = False .Underline = False .SmallCaps = False '... End With
Nach 'With' wird das übergeordnete Objekt angegeben, hier die Schriftart des zweiten Wortes im aktuellen Dokument. Innerhalb des With-Blocks kann dann die Angabe des übergeordneten Objektes entfallen. Der With-Block wird dann mit 'End With' abgeschlossen.
Ausgeschrieben würde die Zuweisung wie folgt aussehen:
ActiveDocument.Words(2).Font.Bold = False ActiveDocument.Words(2).Font.Italic = False ActiveDocument.Words(2).Font.Underline = False ActiveDocument.Words(2).Font.SmallCaps = False '...
With-Blöcke können beliebig tief verschachtelt werden:
With ActiveDocument.Words(2).Font .Bold = False .Italic = False .Underline = False .SmallCaps = False With .Borders .Enable = True .Shadow = True End With End With