Buttons hintereinander schalten

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Buttons hintereinander schalten
von: Jubeldibub
Geschrieben am: 10.05.2015 12:06:27

Hallo,
ich würde gerne eine Art Interface mit mehreren hintereinander geschalteten Auswahlmöglichkeiten in Excel/VBA basteln.
Wie ich mir das grob vorstelle: Es soll zu Anfang einen Button geben. Klickt man auf den, erscheinen 3 weitere Buttons und der erste verschwindet. Klickt man auf einen der drei neuen, verschwinden diese wieder und es erscheint wieder der Erste.
Die Klicks sollen natürlich jeweils auch noch andere Reaktionen auslösen, aber die wären mir erst mal unwichtig. Ich wollte nur mal wissen, ob man das Grundprinzip irgendwie abbilden kann und wie man es umsetzt.

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Nepumuk
Geschrieben am: 10.05.2015 12:20:47
Hallo,
ja das geht. Bleibt nur die Frage ob du das auf einem UserForm machen willst oder in einer Tabelle.
Gruß
Nepumuk

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Daniel
Geschrieben am: 10.05.2015 13:33:14
Hi
du kannst die Buttons mit dem Befehl
Commandbutton1.visible = True
Commdanbutton1.visible = False
ein- und ausblenden.
im Clickevent des ersten Buttons musst du die drei anderen Buttons ein- und den ersten Button ausblenden.
im Clickevent der anderen Buttons musst du zusätzlich zum eigentlichen Code den ersten Button ein- und die anderen ausblenden.
Funktioniert soweit mit Buttons auf Userforms und ActivX-Buttons auf Tabellenblättern.
die alternative wäre, dass du statt den vier Buttons eine Comobox erstellst mit den 3 Buttontexten in der Auswahlliste und entsprechend dem gewählten Eintrag den dazugehörigen Code auslöst.
dh im Clickevent der Combobox kommt der Code:

Select Case Combobox1.Text
    Case "Button 1"
        hier der Code für Button 1
    Case "Button 2"
         hier der Code für Button 2
    Case  "Button 3
         hier der Code für Button 3
    Case Else
End Select
Gruß Daniel

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Jubeldibub
Geschrieben am: 10.05.2015 14:10:42
Hi!
Ihr seid ja super :) Danke schon mal für die Anreize!
Das mit dem "CommandButton1.visible" ist genau das, was ich brauche (denke ich). Die Frage ist jetzt nur: Welchen Namen haben denn meine Buttons? Du sagtest "CommandButton1", aber da findet er bei mir kein Objekt zu, obwohl ich ein ActiveX-Button mit diesem Namen in der Tabelle habe.
Gleich dazu auch die Nachfrage: Kann man Formularsteuerlemente in einer Tabelle auf die Weise auch sichtbar und unsichtbar machen? Oder geht das nur mit ActiveX-Steuerelementen?
Mit UserForm habe ich bisher nicht gearbeitet, scheint aber in dem Zusammenhang interessant zu sein. Kann ich denn auch eine UserForm wie ein PopUp-Fenster durch einen Buttonklick in einer Tabelle aufrufen? Falls ja, könnte ich das für meinen Fall ja gut gebrauchen.

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Werner
Geschrieben am: 10.05.2015 14:18:02
Hallo,
also ich zumindest habe dir ja geschrieben, dass es sich um Schaltflächen aus den Formularsteuerelementen handelt, somit nicht um AcriveX.
Werner

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Jubeldibub
Geschrieben am: 10.05.2015 14:40:26
Ja, danke Werner!
Ich denke, ich brauche aber nicht jedes Mal einen neuen Button erstellen, sondern das mit dem Visible=True/False aus Daniels Antwort funktioniert gut. Auf die Weise behalten die Buttons dann auch immer ihre Makros, die ich ihnen einmal zuweise (sie sind dann eben nur in bestimmten Situationen sichtbar oder unsichtbar).

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Daniel
Geschrieben am: 10.05.2015 14:24:46
Hi
welche Namen deine Steuerlemente haben musst du selber wissen, schließlich hat du sie erstellt.
am einfachsten ist dieses Vorhaben mit den ActiveX-Buttons um zussetzen.
der Code für die einzelnen Buttons befindet sich dann im Modul des Tabellenblatts.
Dort werden dir dann auch die vorhandenen Commandbuttos in der Intellisense-Liste angezeigt, so dass du gar nicht wissen musst, wie diese genau heissen.
befindet sich der Code in einem allgemeinen Modul, dann musst du, wenn du die Commandbuttons ansprechen willst, immer erst das Tabellenblatt davor angeben Tabelle1.Commandbutton1 oder Sheets("Tabelle1").Commandbutton1 (im ersten fall gibst du den Codenamen an, dass ist der Name im Projektexplorer vor der Klammer, im zweiten fall den Indexnamen, dass ist der Name der auf dem Reiter steht).
Wenn du den Blattnamen eingegegeben hast, erscheinen in der Intellisense dann auch wieder die Buttons.
etwas schwieriger wirs, wenn du Formularsteuerelement-Buttons verwendest.
Diese sind für VBA einfache Grafixelemene und müssen über ActiveSheet.Shapes("Grafikname").Visible = True angesprochen werden. Hierbei hast du keine Unterstützung durch die Intellisense, dh du musst den Namen wissen.
Allerdings kannst du den Namen leicht im Namensfeld selbst vergeben (links oben nebend der Bearbeitungsleiste) wenn du das Objekt angeklickt hast.
Gruß Daniel

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Jubeldibub
Geschrieben am: 10.05.2015 14:38:01
Toll! Das Anzeigen und Verschwinden lassen meiner Formularsteuerelement-Buttons klappt nun mit dem "ActiveSheet.Shapes("XY").Visible = True/False". Innerhalb einer UserForm gelang mir dies nun auch, dann eben mit dem einfacheren "CommandButton1.visible=True/False".
Noch mal zurück zu den UserForms. Habe gerade damit ein wenig herumgespielt und würde diese gerne bei meiner Idee mit einbinden.
Dazu aber die Frage: Kann ich eine UserForm als Folge eines Buttonklicks starten? Bislang startet die nur in der Mappe, wenn ich im VBA auf "Sub/UserForm ausführen" gehe. Kann ich die auch irgendwie gezielt starten?
Dann würde ich diese nämlich mit einem Button in der Tabelle aufrufen, dort das Auswahlverfahren mit verschiedenen CommandButtons abbilden (also das gewünschte Interface) und danach wieder einen (bzw. mehrere) dort ausgewählte Werte in die Tabelle schreiben lassen.
Soweit verständlich und umsetzbar?

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Daniel
Geschrieben am: 10.05.2015 14:56:44
Hi
Userforms startet du mit dem Befehl: UserformName.Show
Gruß Daniel

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Jubeldibub
Geschrieben am: 10.05.2015 15:31:03
Und wie beende ich sie danach wieder, so dass sie "von neuem" starten? Mit UserformName.Hide lande ich nur wieder bei der letzten Stelle (wo ich sie verlassen habe). Wie kann ich sie wieder "auf Start" setzen, wenn ich sie das nächste mal mit "Show" aufrufe?

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Daniel
Geschrieben am: 10.05.2015 15:34:23
HI
Unload UserformName
befindet sich der Befehl im Modul der Userform reicht Unload Me
Gruß Daniel

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Jubeldibub
Geschrieben am: 10.05.2015 15:52:28
Super, vielen Dank! Ich probiere jetzt erst mal ein wenig herum und melde mich, wenn ich auf den nächsten Stolperstein treffe ;)

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Nepumuk
Geschrieben am: 10.05.2015 14:38:42
Hallo,
ich hab dir mal eine Beispielmappe mit einem UserForm gemacht. Das UserForm kannst du mit einem Doppelklick in irgendeine Zelle aufrufen. Die Zelle welche auf diesen Doppelklick reagiert kannst du auch auf eine einzelne Zelle oder einen bestimmtem Bereich eingrenzen.
https://www.herber.de/bbs/user/97564.xlsm
Gruß
Nepumuk

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Jubeldibub
Geschrieben am: 10.05.2015 15:53:17
Danke! Das hat mir sehr weitergeholfen. Ich bastele nun erst mal ein wenig herum und melde mich noch mal, sollte noch etwas unklar sein.

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Werner
Geschrieben am: 10.05.2015 13:53:10
Hallo,
ganz so wie du das willst geht es nicht. Wenn du mit dem Klick auf Button1 einen neuen Button erzeugen willst, so geht das grundsätzlich schon. Aber mit jedem weiteren Klick erzeugst du dann einen weiteren Button.
Für deinen Wunsch erstellts du erst insgesamt 4 Button (Formularsteuerelemente, Button auf dem Tabellenblatt)
Anschließend weist du dem Button1 das Makro1 und den Button2, 3 und 4 das Makro2 zu.

Sub Makro1()
'## Button1 ausblenden, Button2, 3, 4 einblenden ''
ActiveSheet.Shapes.Range(Array("Button 2")).Visible = True
ActiveSheet.Shapes.Range(Array("Button 3")).Visible = True
ActiveSheet.Shapes.Range(Array("Button 4")).Visible = True
ActiveSheet.Shapes.Range(Array("Button 1")).Visible = False
End Sub
Sub Makro2()
'## Button1, 3, 4 ausblenden Button1, einblenden ##
ActiveSheet.Shapes.Range(Array("Button 1")).Visible = True
ActiveSheet.Shapes.Range(Array("Button 2")).Visible = False
ActiveSheet.Shapes.Range(Array("Button 3")).Visible = False
ActiveSheet.Shapes.Range(Array("Button 4")).Visible = False
End Sub
Gruß Werner

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Nepumuk
Geschrieben am: 10.05.2015 14:30:08
Hallo Werner,
wenn du nur ein Shape ansprichst, kannst du das mit den Range(Array sparen. Da einfach so:
ActiveSheet.Shapes("Button 2").Visible = True
Und wenn du die Eigenschaft von 3 Shapes auf einmal ändern willst, dann so:
ActiveSheet.Shapes.Range(Array("Button 2", "Button 3", "Button 4")).Visible = False
Gruß
Nepumuk

Bild

Betrifft: AW: Buttons hintereinander schalten
von: Werner
Geschrieben am: 10.05.2015 14:34:55
Hallo Nepumuk,
und wieder was vom Profi dazugelernt. Danke!!!
Ich gebe zu, ich habe nur kurz den Rekorder angeschubst - das hätte der namenlose Fragesteller auch machen können.
Gruß Werner

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Buttons hintereinander schalten"