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

CommanButton ueber Variable ansprechen

Forumthread: CommanButton ueber Variable ansprechen

CommanButton ueber Variable ansprechen
07.09.2018 11:41:11
Torsten
Hallo,
ich habe hier im Forum diesen Codeschnipsel gefunden.
Dim i As Integer
i = 2
Me.Controls("CommandButton" & i).BackColor = &HC000&
Ich moechte einen Button ueber eine Variable ansprechen.
Leider bekomme ich mit diesem Code die Meldung "Invalid use of Me Keyword".
Was muss ich aendern? Funktioniert das in Excel 2013 nicht mehr?
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
wo steht denn der Code?
07.09.2018 11:48:47
Rudi
Hallo,
Me funktioniert z.B. wenn der Code im Klassenmodul des Blatts steht, auf dem sich der CmB befindet.
Gruß
Rudi
AW: wo steht denn der Code?
07.09.2018 12:20:13
Torsten
nein ich habe es in einem Modul. Aber werde es mal dort versuchen.
Danke
AW: wo steht denn der Code?
07.09.2018 12:41:17
Torsten
habe es jetzt im Worksheet_Activate eingebaut, aber bekomme da "Compile Error, Method or data member not found". Der Teil .Controls ist markiert.
Die Variable bekommt die richtige Nummer. Im Einzelschritt getestet
Anzeige
Die Frage war Klasse, und nicht Prozedur!
07.09.2018 12:53:49
EtoPHG
Thorsten,
Da du nicht schilderst, was du genau willst, kann man nur schwer helfen, bzw. im Nebel
stochern. Alles was wir bis jetzt wissen ist Zitat: ch moechte einen Button ueber eine Variable ansprechen.
Das mikrige Codeschnipsel einfach mal in eine Ereignis-Prozedur zu werfen ist sicher nicht der richtige Ansatz. Also: Warum, Wann, unter welchen Bedingungen und Auslöser willst du das so?
Gruess Hansueli
Anzeige
AW: Die Frage war Klasse, und nicht Prozedur!
07.09.2018 13:44:11
Torsten
Hallo Hansueli,
Zur Erklaerung:
Ich erzeuge einen Button mit dem Code
Dim a As Long
a = Sheets("STEPS").Cells(Rows.Count, 2).End(xlUp).Row - 2
Dim btn As Button
Sheets("FORM").OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=ActiveSheet.Cells(6, 8).Left + 5, _
Top:=ActiveSheet.Cells(6, 8).Top, Width:=117#, Height:=27).Name = "CommandButton" & a
Dieser hat dann zum Beispiel die Bezeichnung CommandButton50, da in a eine 50 steht.
Da ich aber nicht weiss, welcher Button gerade erzeugt wird und ich ihm aus
Sheets("STEPS").Cells(Rows.Count, 3).End(xlUp).Row - 2

die Caption uebergeben will, brauche ich ja
Commandbutton50.Caption = Sheets("STEPS").Cells(a, 3).Value
Mein Problem ist das ich das "CommandButton" nur als String hinbekomme. Also mit Anfuehrungszeichen. Aber das funktioniert ja nicht, weil dann in der Variablen stehen wuerde:
"CommandButton"50
Wie kann ich den String in einen Objektnamen umwandeln?
Anzeige
Ich geb's auf...
07.09.2018 14:45:40
EtoPHG
Thorsten,
1. Also hat das Problem doch mit dem vorherigen Thread zu tun.
Zitat: Da ich aber nicht weiss, welcher Button gerade erzeugt wird Warum nicht? Du erzeugst in ja mit Code!
2. Du fütterst die Hilfesteller mit unsagbar kleinen, unzusammenhängenden Schnipseln an Daten (manchmal nicht mal Informationen!) und erwartest mehr Hellsehen, denn konkrete Hilfe. Wir sehen nicht was du warum anstellst!
3. Eine Frage wie Zitat: Wie kann ich den String in einen Objektnamen umwandeln? und Zitat: weil dann in der Variablen stehen wuerde: "CommandButton"50
deuten auf völlige Ahnungslosigkeit von Programmierung hin. Ein Objektname IST ein String! Bei einer Zuweisung wie Variable = "CommandButton" werden KEINE Anfuehrungszeichen in die Variable übertragen, sondern nur, was zwischen diesen steht!
...und Zitat: weil dann in der Variablen stehen wuerde: "CommandButton"50
5. Mit Basiskentnissen sich an dynamisch erstellte OLE-Controls zu wagen, finde ich nicht mutig, sondern fahrlässig. Das kann fast nur im Disaster enden.
Gruess Hansueli
Anzeige
AW: Ich geb's auf...
07.09.2018 16:42:43
Torsten
Ok lass es sein, ich habs inzwischen geloest. Auch ohne deine Besserwisserischen Kommentare.
AW: OT: Auch darum Besserwisser ;-)
07.09.2018 19:06:22
EtoPHG
Hallo Luc :-?
Danke, für die Verteidigung. Aber eigentlich sind mir Reaktionen wie die von Thorsten ziemlich schnurz.
Es zeigt sich auch in der Tatsache, dass er nun eine (Quasi)-Lösung seiner vorangehenden Anfrage gefunden hat, die aber niemals unter allen Vorausbedingungen gültige Resultate liefern kann und er dort mit keiner Silbe auf meinen Lösungsvorschlag eingegangen ist. Ich gönne niemandem Schlechtes, führ mich aber vielleicht zu oft als "Rufer in der Wüste" auf ;-), aber werde mich wieder kritisch äussern, wenn dann die Anfrage kommt "Wie kann ich ein Klick-Makro für ein dynamisch erstellten CommandButton per VBA erstellen?", oder ähnliches.
Gruess & schöWE Hansueli
Anzeige
Ja, verstehe ich! ;-) Dito schöWE! owT
08.09.2018 03:50:24
Luc:-?
:-?
Wieso ein neuer Thread?
07.09.2018 12:00:36
EtoPHG
Hallo,
Hat das nicht mit diesem Problem zu tun?
Gruess Hansueli
AW: Wieso ein neuer Thread?
07.09.2018 12:20:46
Torsten
nicht direkt
Anzeige
AW: Indirekt
07.09.2018 13:28:13
Gerd
Moin Torsten,
du kannst im unbekannten Code im VBA-Projekt deiner geheimen Datei
versuchsweis das Me durch Worksheets("NameDeinerTabelle") ersetzen. :-)
Gruß Gerd
AW: Indirekt
07.09.2018 13:59:07
Torsten
Das hatte ich schon versucht aber mit der Fehlermeldung:
Object doesn't support this property or method
Anzeige
AW: CommanButton ueber Variable ansprechen
07.09.2018 19:04:40
daniel
Hi
das Me.Controls(Steuerelementname als String) funktioniert nur in Userforms, aber nicht mit den Steuerelementen auf einem Tabellenblatt.
von daher sind Codeschnipsel immer mit Vorsicht zu genießen, wenn man den Zusammenhang nicht kennt.
Gruß Daniel
;
Anzeige
Anzeige

Infobox / Tutorial

CommandButton über Variable ansprechen in Excel VBA


Schritt-für-Schritt-Anleitung

Um einen CommandButton über eine Variable in Excel VBA anzusprechen, kannst du folgende Schritte befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul oder Klassenmodul auswählen: Stelle sicher, dass du den Code im richtigen Modul schreibst. Um auf Steuerelemente auf einem Arbeitsblatt zuzugreifen, solltest du den Code im entsprechenden Klassenmodul platzieren.

  3. Code eingeben: Verwende den folgenden Code, um einen CommandButton zu erstellen und dessen Eigenschaften über eine Variable zu ändern:

    Dim i As Integer
    Dim btnName As String
    i = 2
    btnName = "CommandButton" & i
    Me.Controls(btnName).BackColor = &HC000
  4. Fehlerbehebung: Wenn du die Fehlermeldung "Invalid use of Me Keyword" erhältst, liegt dies daran, dass du den Code in einem Modul und nicht in einem Klassenmodul (z. B. für das Arbeitsblatt) ausführst.

  5. Testen: Führe den Code aus, um sicherzustellen, dass er den gewünschten Effekt hat.


Häufige Fehler und Lösungen

  • Fehler: "Invalid use of Me Keyword": Dieser Fehler tritt auf, wenn der Code nicht im richtigen Kontext ausgeführt wird. Stelle sicher, dass du den Code im Klassenmodul des Arbeitsblatts verwendest, auf dem sich der CommandButton befindet.

  • Fehler: "Compile Error, Method or data member not found": Überprüfe, ob die Steuerelemente korrekt benannt sind und ob du den richtigen Zugriff auf die Controls hast.

  • Fehler: "Object doesn't support this property or method": Dies kann passieren, wenn du versuchst, Me.Controls in einem nicht unterstützten Kontext zu verwenden. Verwende stattdessen den Namen des Arbeitsblatts, z.B. Worksheets("NameDesBlatts").Controls.


Alternative Methoden

Wenn die oben genannten Methoden nicht funktionieren, kannst du auch folgende Alternativen ausprobieren:

  • Direkte Zuweisung: Anstatt über Variablen zu arbeiten, kannst du den Button direkt ansprechen, falls du den Namen kennst:

    CommandButton50.Caption = "Neuer Text"
  • UserForms: In UserForms kannst du Me.Controls verwenden, um auf Steuerelemente zuzugreifen, da dies der richtige Kontext ist.


Praktische Beispiele

Hier sind einige Beispiele, wie du CommandButtons in Excel VBA dynamisch ansprechen kannst:

  1. Button erstellen und anpassen:

    Dim a As Long
    a = Sheets("STEPS").Cells(Rows.Count, 2).End(xlUp).Row - 2
    Dim btn As Object
    Set btn = Sheets("FORM").OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
       Link:=False, _
       DisplayAsIcon:=False, _
       Left:=ActiveSheet.Cells(6, 8).Left + 5, _
       Top:=ActiveSheet.Cells(6, 8).Top, Width:=117, Height:=27)
    btn.Name = "CommandButton" & a
    btn.Object.Caption = Sheets("STEPS").Cells(a, 3).Value
  2. Farbe des Buttons ändern:

    Dim buttonIndex As Integer
    buttonIndex = 2 ' Beispielindex
    Dim buttonName As String
    buttonName = "CommandButton" & buttonIndex
    Me.Controls(buttonName).BackColor = RGB(255, 0, 0) ' Rot

Tipps für Profis

  • Verwende Fehlerbehandlung: Setze On Error Resume Next, um Fehler zu ignorieren und sanft weiterzumachen, besonders wenn du mit dynamisch generierten Steuerelementen arbeitest.

  • Dokumentiere deinen Code: Schreibe Kommentare, um den Zweck und die Funktionsweise deines Codes zu erklären. Dies hilft nicht nur dir, sondern auch anderen, die deinen Code in Zukunft lesen.

  • Vermeide magische Zahlen: Verwende Konstanten oder benannte Bereiche, um die Wartbarkeit deines Codes zu erhöhen.


FAQ: Häufige Fragen

1. Warum funktioniert Me.Controls nicht in einem normalen Modul? Me.Controls funktioniert nur in einem Klassenmodul, wie z.B. einem Arbeitsblatt oder UserForm. In einem normalen Modul musst du auf das spezifische Arbeitsblatt zugreifen.

2. Wie kann ich einen CommandButton dynamisch benennen? Du kannst eine Variable verwenden, um den Namen zu generieren, z.B. btnName = "CommandButton" & i. Achte darauf, dass der Button tatsächlich existiert, bevor du versuchst, ihn anzusprechen.

3. Kann ich die Farbe eines CommandButtons ändern? Ja, du kannst die Farbe eines CommandButtons mit der BackColor-Eigenschaft ändern, z.B. Me.Controls("CommandButton1").BackColor = RGB(255, 0, 0) für rot.

4. Welche Excel-Version benötige ich dafür? Die beschriebenen Methoden funktionieren in Excel 2013 und späteren Versionen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige