Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Steuerelemente per Schleife lesen?

Steuerelemente per Schleife lesen?
Jo
Hallo ihr Wissenden,
ich scheitere an folgendem Problem:
Dim Knopf as OLEObject
for each Knopf in Worksheets("Tabelle1").OLEObjects
Array(i)=Knopf.Caption
next Knopf

Ich möchte alle CommandButtons auslesen, die manuell (per Toolbox) in die Tabelle eingefügt wurden.
Vorher muss aber noch eine Abfrage rein, ob das Object ein command button ist (ich habe auch Bilder in der Tab.)
Ich weiss allerdings nicht, wie die buttons heißen, also "CommandButton1" oder "cmd...".
Im Einzelschritt wird der Code in der for-next-Schleife gar nicht abgearbeitet, er springt gleich hinter "Next Knopf". Oder sind die Buttons gar keine Ole-Objekte?
Was mache ich falsch?
Ich hab mir schon nen Wolf gesucht sowohl in der xl-Hilfe als auch hier im Forum. Leider ohne Erfolg.
Wäre toll, wenn jemand mit einem Grundgerüst helfen könnte.
Danke und viele Grüße
Jo
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
if typename(Knopf.object)="CommandButton" then
01.09.2009 16:06:36
NoNet
Hallo Jo,
teste mal diese Überprüfung :
Sub AlleCommandbuttonsAnzeigen()
Dim arr(), intI As Integer
Dim objKnopf As OLEObject
ReDim arr(100) 'max. 100 Commandbuttons
For Each objKnopf In Worksheets("Tabelle1").OLEObjects
If TypeName(objKnopf.Object) = "CommandButton" Then
intI = intI + 1
arr(intI) = objKnopf.Object.Caption
End If
Next
ReDim Preserve arr(intI)
For intI = 1 To UBound(arr)
MsgBox arr(intI)
Next
End Sub
Gruß, NoNet
Anzeige
Lösung gefunden!!
02.09.2009 11:57:07
Jo
Also, die Buttons sind Shapes.
So klappt es (Auszug):
Dim objKnopf As Object
Dim arr(100)
intI = 1
For Each objKnopf In Worksheets("Tabelle1").Shapes
If Left(objKnopf.Name, 6) = "Button" Then
arr(intI) = objKnopf.AlternativeText
intI = intI + 1
end if
next objKnopf
Danke trotzdem für Eure Mühen!
Schöne Grüße
Jo
Anzeige
AW: Steuerelemente per Schleife lesen?
01.09.2009 16:07:55
Heinz
Hi,
du zählst die Variable i nicht hoch.
Außerdem musst du ja erst prüfen, ob das OLE-Object überhaupt ein Button ist.
mfg Heinz
AW: Steuerelemente per Schleife lesen?
02.09.2009 08:01:15
Jo
Hallo zusammen,
@NoNet: Dein Code klappt leider auch nicht. Im Einzelschritt wird von "For each objKnopf..." direkt zur Redim Preserve-Anweisung gesprungen.
@Heinz: Ich hatte nicht den ganzen Code hier hin kopiert.
Inzwischen habe ich rausgefunden, dass in meinem Blatt keine ActiveX-Steuerelemnte, sondern Formularsteuerelemente benutzt werden. Wie unterscheiden die sich eigentlich?
Und wie kann ich die denn abfragen?
Viele Grüße
Jo
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Steuerelemente in Excel per Schleife auslesen


Schritt-für-Schritt-Anleitung

Um alle CommandButtons in einem Excel-Arbeitsblatt auszulesen, kannst Du den folgenden VBA-Code verwenden. Dieser Code überprüft, ob das OLE-Objekt ein CommandButton ist und speichert die Captions in einem Array.

Sub AlleCommandbuttonsAnzeigen()
    Dim arr(), intI As Integer
    Dim objKnopf As OLEObject
    ReDim arr(100) 'max. 100 Commandbuttons
    For Each objKnopf In Worksheets("Tabelle1").OLEObjects
        If TypeName(objKnopf.Object) = "CommandButton" Then
            intI = intI + 1
            arr(intI) = objKnopf.Object.Caption
        End If
    Next
    ReDim Preserve arr(intI)
    For intI = 1 To UBound(arr)
        MsgBox arr(intI)
    Next
End Sub

Falls Du feststellst, dass die Buttons in Deinem Arbeitsblatt keine OLE-Objekte sind, sondern Shapes, kannst Du den folgenden Code verwenden:

Sub AlleShapesAnzeigen()
    Dim objKnopf As Object
    Dim arr(100)
    intI = 1
    For Each objKnopf In Worksheets("Tabelle1").Shapes
        If Left(objKnopf.Name, 6) = "Button" Then
            arr(intI) = objKnopf.AlternativeText
            intI = intI + 1
        End If
    Next objKnopf
End Sub

Häufige Fehler und Lösungen

  1. Fehler: Springen direkt zur ReDim Preserve-Anweisung

    • Lösung: Stelle sicher, dass Du im Code überprüfst, ob das OLE-Objekt tatsächlich ein CommandButton ist. Wenn nicht, kann dies zu einem Laufzeitfehler führen.
  2. Fehler: Buttons werden nicht erkannt

    • Lösung: Überprüfe, ob die Steuerelemente, die Du verwendest, ActiveX- oder Formularsteuerelemente sind. Du musst den Code entsprechend anpassen, um die richtige Art von Steuerelementen auszulesen.

Alternative Methoden

Eine Alternative zum Auslesen von Steuerelementen ist die Verwendung von Excel-Funktionen. Hierzu könntest Du auch eine benutzerdefinierte Funktion erstellen, die die benötigten Informationen zurückgibt. VBA bietet hier die größte Flexibilität, aber Du kannst auch mit einem Makro arbeiten, das die gleichen Änderungen an einer Vielzahl von Objekten vornimmt.


Praktische Beispiele

Angenommen, Du hast mehrere CommandButtons auf einem Arbeitsblatt namens "Tabelle1". Der folgende Code zeigt, wie Du die Captions aller Buttons in einer MsgBox anzeigen kannst:

Sub ShowAllButtonCaptions()
    Dim objKnopf As OLEObject
    Dim captions As String
    For Each objKnopf In Worksheets("Tabelle1").OLEObjects
        If TypeName(objKnopf.Object) = "CommandButton" Then
            captions = captions & objKnopf.Object.Caption & vbCrLf
        End If
    Next
    MsgBox captions
End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft Dir, Fehler zu vermeiden, indem Du sicherstellst, dass alle Variablen deklariert sind.
  • Nutze Debug.Print: Für die Fehlersuche kannst Du Debug.Print verwenden, um Zwischenergebnisse in das Immediate-Fenster auszugeben.
  • Optimiere den Code: Wenn Du viele Shapes hast, kann es sinnvoll sein, den Code zu optimieren, um die Performance zu verbessern, insbesondere wenn Du in großen Excel-Dateien arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich aktive Steuerelemente in Excel unterscheiden?
ActiveX-Steuerelemente sind OLE-Objekte, während Formularsteuerelemente Shapes sind. Du kannst den Typ mit TypeName() überprüfen.

2. Was kann ich tun, wenn mein Code nicht funktioniert?
Überprüfe zuerst, ob Du die richtige Art von Steuerelementen ansprichst und ob alle Variablen korrekt deklariert sind. Nutze den Debugger, um den Fehler zu finden.

3. Gibt es eine Begrenzung für die Anzahl der Steuerelemente?
In Excel gibt es keine harte Grenze für die Anzahl der Steuerelemente, die Du hinzufügen kannst, aber die Performance kann beeinträchtigt werden, wenn Du eine sehr große Anzahl verwendest.

4. Welche Excel-Version benötige ich für diese Skripte?
Die meisten dieser VBA-Skripte sind mit Excel 2010 und späteren Versionen kompatibel. Prüfe bei älteren Versionen die Unterstützung für VBA.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige