VBA-Programmierung in Microsoft Excel

Tutorial: Excel-Beispiele

VBA-Begriff: Verwenden von ActiveX-Steuerelementen in Tabellenblättern

Dieses Thema behandelt spezielle Informationen zum Einsatz von ActiveX-Steuerelementen in Tabellenblättern und Diagrammblättern. Allgemeine Informationen zum Hinzufügen und Arbeiten mit Steuerelementen finden Sie unter Verwenden von ActiveX-Steuerelementen in einem Dokument und Erstellen eines benutzerdefinierten Dialogfelds.

Beachten Sie beim Arbeiten mit Steuerelementen in einem Tabellenblatt die folgenden Punkte.

  • Zusätzlich zu den für ActiveX-Steuerelementen verfügbaren Standardeigenschaften können in Microsoft Excel die folgenden Eigenschaften bei ActiveX-Steuerelementen verwendet werden: BottomRightCell, LinkedCell, ListFillRange, Placement, PrintObject, TopLeftCell und ZOrder.

    Diese Eigenschaften können über den Namen des ActiveX-Steuerelements festgelegt und zurückgegeben werden. In dem folgenden Beispiel erfolgt in dem Arbeitsmappenfenster ein Bildlauf so, dass sich CommandButton1 in der oberen linken Ecke befindet.

    Set t = Sheet1.CommandButton1.TopLeftCell
    With ActiveWindow
        .ScrollRow = t.Row
        .ScrollColumn = t.Column
    End With

  • Einige Methoden und Eigenschaften von Microsoft Excel Visual Basic werden deaktiviert, wenn ein ActiveX-Steuerelement aktiviert wird. Zum Beispiel kann die Sort-Methode nicht verwendet werden, wenn ein Steuerelement aktiv ist, so dass der folgende Code in einer Schaltflächenklick-Ereignisprozedur fehlschlägt (weil das Steuerelement weiterhin aktiv ist, nachdem der Benutzer darauf geklickt hat).
    Private Sub CommandButton1.Click
        Range("a1:a10").Sort Key1:=Range("a1")
    End Sub

Sie können dieses Problem umgehen, indem Sie ein anderes Element im Tabellenblatt aktivieren, bevor Sie die fehlgeschlagene Eigenschaft oder Methode verwenden. Der folgende Code sortiert den Bereich beispielsweise:

Private Sub CommandButton1.Click
    Range("a1").Activate
    Range("a1:a10").Sort Key1:=Range("a1")
    CommandButton1.Activate
End Sub

  • Steuerelemente in einer Microsoft Excel-Arbeitsmappe, die in einem Dokument in einer anderen Anwendung eingebettet sind, funktionieren nicht, wenn der Benutzer zum Bearbeiten auf die Arbeitsmappe doppelklickt. Die Steuerelemente funktionieren, wenn der Benutzer mit der rechten Maustaste auf die Arbeitsmappe klickt und aus dem Kontextmenü den Befehl Open wählt.

  • Wenn eine Microsoft Excel-Arbeitsmappe im Dateiformat "Microsoft Excel 5.0/95-Arbeitsmappe" gespeichert wird, gehen die Informationen für ActiveX-Steuerelemente verloren.

  • Das Me-Schlüsselwort in einer Ereignisprozedur für ein ActiveX-Steuerelement in einem Tabellenblatt bezieht sich auf das Tabellenblatt und nicht auf das Steuerelement.

Hinzufügen von Steuerelementen mit Visual Basic

In Microsoft Excel werden ActiveX-Steuerelemente durch OLEObject-Objekte in der OLEObjects-Auflistung dargestellt (alle OLEObject-Objekte befinden sich ebenfalls in der Shapes-Auflistung). Um ein ActiveX-Steuerelement per Programm zu einem Tabellenblatt hinzuzufügen, verwenden Sie die Add-Methode der OLEObjects-Auflistung. In dem folgenden Beispiel wird eine Befehlsschaltfläche zu der ersten Arbeitsmappe hinzugefügt.

Worksheets(1).OLEObjects.Add "Forms.CommandButton.1", _
    Left:=10, Top:=10, Height:=20, Width:=100

Verwenden von Steuerelementeigenschaften mit Visual Basic

Am häufigsten verweist Visual Basic-Code über den Namen auf ActiveX-Steuerelemente. In dem folgenden Beispiel wird die Beschriftung des Steuerelements mit dem Namen "CommandButton1" geändert.

Sheet1.CommandButton1.Caption = "Run"

Beachten Sie, dass Sie beim Verwenden eines Steuerelementnamens außerhalb des Klassenmoduls für das Tabellenblatt, das das Steuerelement enthält, den Steuerelementnamen zusammen mit dem Blattnamen angeben müssen.

Zum Ändern des Steuerelementnamens, der in Visual Basic-Code verwendet wird, wählen Sie das Steuerelement aus und legen Sie die (Name)-Eigenschaft im Eigenschaftenfenster fest.

Da ActiveX-Steuerelemente auch durch OLEObject-Objekte in der OLEObjects-Auflistung dargestellt werden, können Sie Steuerelementeigenschaften mit Hilfe der Objekte in der Auflistung festlegen. In dem folgenden Beispiel wird die linke Position des Steuerelements mit dem Namen "CommandButton1" festgelegt.

Worksheets(1).OLEObjects("CommandButton1").Left = 10

Steuerelementeigenschaften, die nicht als Eigenschaften des OLEObject-Objekts angezeigt werden, können festgelegt werden, indem das eigentliche Steuerelementobjekt mit der Object-Eigenschaft zurückgegeben wird. In dem folgenden Beispiel wird die Beschriftung für "CommandButton1" festgelegt.

Worksheets(1).OLEObjects("CommandButton1"). _
    Object.Caption = "run me"

Da alle OLE-Objekte auch Mitglieder der Shapes-Auflistung sind, können Sie die Auflistung verwenden, um die Eigenschaften für mehrere Steuerelemente festzulegen. In dem folgenden Beispiel wird der linke Rand aller Steuerelemente des ersten Tabellenblatts ausgerichtet.

For Each s In Worksheets(1).Shapes
    If s.Type = msoOLEControlObject Then s.Left = 10
Next

Verwenden von Steuerelementnamen mit der Shapes- und der OLEObjects-Auflistung

Ein ActiveX-Steuerelement in einem Tabellenblatt verfügt über zwei Namen: der Name der Form, die das Steuerelement enthält, der beim Anzeigen des Blatts im Feld Name angezeigt wird, und den Codenamen für das Steuerelement, das im Eigenschaftenfenster in der Zelle rechts neben (Name) angezeigt wird. Wenn Sie zum ersten Mal ein Steuerelement zu einem Blatt hinzufügen, stimmen Formname und Codename überein. Wenn Sie jedoch den Formnamen oder den Codenamen ändern, wird der andere nicht automatisch entsprechend geändert.

Sie verwenden den Codenamen eines Steuerelements in dem Namen seiner Ereignisprozeduren. Wenn Sie jedoch ein Steuerelement aus der Shapes- oder der OLEObjects-Auflistung für ein Blatt zurückgeben, müssen Sie den Formnamen und nicht den Codenamen verwenden, um anhand des Namens auf das Steuerelement zu verweisen. Nehmen Sie beispielsweise an, dass Sie ein Kontrollkästchen zu einem Blatt hinzufügen, und dass der Standardformname und der Standardcodename "CheckBox1" lauten. Wenn Sie anschließend den Codenamen des Steuerelements ändern, indem Sie im Eigenschaftenfenster chkFinished neben (Name) eingeben, müssen Sie chkFinished in den Namen von Ereignisprozeduren jedoch weiterhin "CheckBox1" verwenden, um das Steuerelement aus der Shapes- oder der OLEObject-Auflistung zurückzugeben (siehe dazu folgendes Beispiel).

Private Sub chkFinished_Click()
    ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1
End Sub