Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Tutorials

Objekte (1) - Punktfrustration

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --Gruppenthema: 4 Folgen 1 2 3 4 Sie sind in Folge:1
Die Punktfrustration

Jetzt hält man sich schon an die Regeln, deklariert sauber, nutzt Option Explicit und doch:

Man schreibt ActiveCell danach einen Punkt und wunderbar klappt das Intellisense Fenster auf und man kann aus den Eigenschaften und Methoden auswählen.

In der nächsten Zeile schreibt man Selection und dann einen Punkt und ??? Nichts passiert.

Wieso? Weshalb? Warum?

Was zuerst wie eine Unterstützung der Keybordindustrie aussieht - Denn wieviele Makrofanatiker haben versucht, der Punkttaste eine punktuelle Unterstützung mit dem Vorschlaghammer zukommen zu lassen - hat zumindest teilweise eine Berechtigung.

Das es mit der Selection nicht funktioniert, ist erklärbar:

Selection ist nicht eindeutig. Dies kann eine Zelle sein, kann aber auch ein Shape sein oder oder…
Ich spreche also ein Objekt an, welches nicht eindeutig ist. (Irgenwie irgendwo hat man da auch schon so etwas gelesen wie Multiples Objekt)

Da VBA ja nicht wissen kann, was für ein Typ die Selection ist, kann es mir auch keine Auswahl anbieten. (Ein Shape hat nunmal keinen Range und eine Zelle keinen Textframe und ...)

Ein weitere erklärbares Beispiel ist Sheets.
Wenn ich Sheets(1) schreibe, woher soll dann VBA wissen ob es sich um ein Tabellenblatt handelt (Worksheet) oder um ein Diagrammblatt(Chart).
Beide haben zwar viele gemeinsame Eigenschaften und Methoden aber auch grundsätzlich Verschiedene.
Hier ist das Sheetsobjekt ein Behälter, der Beide aufnehmen aber die Intellisense nicht anbieten kann.

Hier muss ich halt selbst die Eigenschaften und Methoden hinschreiben, die ich ansprechen will.

Das Unerklärbare:

Schreibe ich nun Workbooks(1) und einen Punkt - hopps, die Intellisense klappt auf.
Nehme ich nun Worksheets(1) und einen Punkt - hopps, wo ist der Hammer.

Die OH lässt sich über das Worksheetsobject aus, dass es ein multiples Objekt ist und glaubt damit, der Käse sei gegessen.
Ich möchte da vehement mein Veto aussprechen. Dies ist m.E. einfach nur Müll, mit dem wir leben müssen.

Tatsächlich ist es so, dass sehr viele indizierbaren Objekte - also die Dinger, die ich mit (Zahl/Namen) ansprechen kann, keine Intellisense anbieten. Wobei dies aber auch keine Regel ist, wie wir am Workbook sehen.

Die Lösung:

Für Dinger wie Sheets und Selection gibt es keine Lösung. Denn auf diese kann ich keine Objektvariable ansetzen. Die sind nunmal nicht eindeutig.
Aber für die meisten anderen Objekte kann ich dies.

Nehmen wir an, ich will die Intellisense für Worksheets haben. Und zwar z.B. für Worksheets(1)

Dafür deklariere ich einfach eine Variable:
Dim oBlatt as WorkSheet

Setze sie auf mein gewünschtes Worksheet an:

Set oBlatt = WorkSheets(1)

Und nun kann ich in meinem weiter Code immer über meine Objektvariable oBlatt auf mein WorkSheets(1) zugreifen - und zwar mit Intellisense!

Probieren Sie es einfach aus.

Tatsächlich können Sie sich auch die Eigenschaften und Methoden eines Objektes auch einfach mal nur so anschauen, ohne die Variable auf ein tatsächlich existierendes Objekt anzusetzen (Set).

Wenn Sie in einer Sub Dim oShape as Shape schreiben und dann oShape und einen Punkt , schon klappt die Intellisense auf. Um die Variabel aber im Code wirklich nutzen zu können, müssen Sie sie aber natürlich auf ein existierendes Shape ansetzen.

Wink mit dem Zaunpfahl Numero 1:

Wenn Sie eine Punkt tippen und danach die Intellisense nicht erscheint, bedeutet dies lange noch nicht, dass das Objekt keine Eigenschaften oder Methoden hat.
Es ist dann einfach nur so, dass Ihnen VBA diese nicht zur Auswahl anbietet, sondern Sie selbst wissen müssen, was Sie dann schreiben.

Wink mit dem Zaunpfahl Numero 2:

Viel wichtiger ist aber noch die Information, dass selbst wenn Ihnen die Intellisense angeboten wird, dies nicht unbedingt bedeutet, dass dort alle Eigenschaften und Methoden dargestellt werden!!!

Vertrauen Sie der Intellisense nicht. Probieren geht über studieren.
Bevor Sie sagen, dieses Objekt hat die Eigenschaft oder Methode nicht, weil es mir in der Intellisense nicht angezeigt wird, probieren Sie es erst aus.
Sie können manchmal überrascht werden.


Dieses Thema hat weitere Beiträge

Objekte (1) - Punktfrustration
Objekte (2) - Laufzeitfehler 438
Objekte (3) - Me
Objekte (4) - Parent

Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben