Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA dynamische Userform mit Radio-Button

VBA dynamische Userform mit Radio-Button
23.06.2022 16:06:43
Joschi
Hallo Forum,
auf der Basis eines Beispiels von Hajo Ziplies auf dessen Internetseite habe ich für mich - und ausschließlich für den privaten Gebrauch - eine Funktion entwickelt, um mit Hilfe von Radio-Buttons eine bequeme Antwort des aktuellen Anwenders zu erhalten.
Die Userform sieht inzwischen gut aus. Auch das Umschalten von einem Knopf auf den anderen funktioniert. Doch das war es auch schon. Was mir jetzt noch fehlt, ist die Frage: wie bekomme ich mit, dass einer der Radio-Buttons gedrückt wurde, und zwar welcher? Außerdem hätte ich gerne auch einen Command-Button für die Funktion "Abbruch".
Die Userform ist immer nur für einen einmaligen Gebrauch bestimmt.
Vor dem .Show und vor dem .Remove ist ein "Stop" eingebaut, um sich bestimmte Informationen anschauen zu können.
Mein Ziel ist es, die Position des ausgewählten Button-Textes im Array als Ergebnis zurückzugeben. Ob das von 1 bis x, oder von 0 bis x sein wird, muss sich noch zeigen. Abbruch ist dann auf jeden Fall eine Position vor der kleinsten; also 0 oder -1.
Der Code ist hier zu finden: https://www.herber.de/bbs/user/153736.txt
Wer kann mir weiterhelfen?
Leider läßt es Excel nicht zu, dass ein einmal verwendeter Name für die Userform nochmals benutzt werden darf, ohne dass die Mappe geschlossen und neu geöffnet wurde. Deshalb scheidet die Vorgabe eines festen Namens aus und ich muss mir zusätzlich noch Gedanken machen, wie ich Userforms automatisch löschen kann. Dabei hilft mir vermutlich der Standardname "Userform" mit einer zusätzlichen Zahl dahinter. Es wäre also denkbar, alle Userforms mit solch einem Namen bei jedem Durchlauf zu löschen. Das ist allerdings nur eine Fleißaufgabe und kein Problem für das Forum.
Gruß Joschi
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA dynamische Userform mit Radio-Button
23.06.2022 16:25:41
Daniel
Hi
dynamisch + Radiobutton = LISTBOX (oder auch Combobox)
also statt vieler Radiobuttons einfach EINE einzige Listbox verwenden.
dieser kann man beliebig viele Optionen hinzufügen und hat trotzdem immer noch nur ein einziges Steuerelement, welches man mit einem Event-Makro versehen kann, damit man "mitbekommt", wenn ein Button geklickt wird.
Sowas wird mit zu laufzeit erstellten einzelnen Buttons wesentlisch schwieriger.
Anzeige
AW: VBA dynamische Userform mit Radio-Button
23.06.2022 17:16:31
Joschi
Hi Daniel,
Eine Listbox bzw. Combobox habe ich ausgeschlossen, weil ich dafür auf dem Tabellenblatt einen bestimmten Bereich benötige. Eine Userform "schwebt" über allem. Deshalb möchte ich das Ziel mit einer Userform erreichen.
Gruß Joschi
AW: VBA dynamische Userform mit Radio-Button
23.06.2022 17:22:31
Daniel
Woher stammt deine Annahme, dass eine Userform nur RadioButtons enthalten könne und keine Listboxen?
Man kann List- und Comboboxen genauso auf einer Userform platzieren wie Radiobuttons, Checkboxen oder Commandbuttons.
Gruß Daniel
Anzeige
AW: VBA dynamische Userform mit Radio-Button
23.06.2022 18:23:24
Joschi
Hi Daniel,
bitte akzeptiere es, dass ich meine halbfertige Lösung weiterentwickeln möchte. Die Userform ist - mit Ausnahme der Abbruch-Schaltfläche - fertiggestellt. Jetzt ist nur noch die Frage, welchen Code brauche ich zusätzlich, um an die Entscheidung in der Userform zu gelangen.
Gruß Joschi.
Anzeige
AW: VBA dynamische Userform mit Radio-Button
23.06.2022 19:11:46
Zwenn
Hallo Joschi,
um dynamisch generierte Steuerelemente mit Events zu versehen, musst Du Klassenprogrammierung verwenden. Das dürfte mit Deinem angegebenen Lvl "Basiskenntnisse in VBA" eher schwierig zu verstehen sein. Also solltest Du vielleicht doch noch einmal über den Vorschlag von Daniel nachdenken. Der vereinfacht Dein Problem nämlich um einiges und wird schon schwer genug für Dich sein.
Falls Du es doch mit den dynamischen Elementen versuchen willst, kannst Du hier nachsehen, wie man Events dran tackert.
https://www.online-excel.de/excel/singsel_vba.php?f=57
Viele Grüße,
Zwenn
Anzeige
AW: VBA dynamische Userform mit Radio-Button
23.06.2022 19:17:01
Daniel
wie Zwenn schreibt, dafür brauchst du dann Klassenprogrammierung.
da bin ich raus, denn die kapiere ich selber nicht.
Die müsstest du dir selber aneignen, um dein Projekt fertig zu stellen.
viel spass dabei.
Gruß Daniel
AW: VBA dynamische Userform mit Radio-Button
23.06.2022 22:23:17
Alwin
Hallo Joschi,
lade doch einfach deinen bisherigen Stand in einer Beispieldatei hoch. Anbei mal ein Beispiel wie in einer Userform ein ganzer Teil dynamisch erzeugt und die Events entsprechend z.T. in Klassen verarbeitet werden. Das ist eigentlich kein Hexenwerk, wenn man einen Plan hat. Viel Spaß beim Ausprobieren. Das Ding habe ich mal aus Jux und Dallerei gebastelt.
Ja und deine Ratiobuttons musst du in ein Array einlesen. Damit haben diese Dinger Nummern und mit diesen Nummern lassen sich die Ereignisse auswerten.
https://www.herber.de/bbs/user/153740.xlsm
Gruß Uwe
Anzeige
AW: VBA dynamische Userform mit Radio-Button
24.06.2022 00:26:08
Zwenn
Insgesamt ein schönes Beispiel Uwe. Aber für einen Anfänger vielleicht etwas overkill und "zu mauslastig" ;-)
Hier ist ein Beispiel, das sich auf die dynamische Erzeugung von Steuerelementen inklusive Events konzentriert. Das ist ein Beispiel, dass ich mal in noch einfacherer Form auf StackOverflow veröffentlicht habe. (Ohne Array, in dem die Steuerelemente gesammelt werden). Ich habe das auf Deutsch kommentiert, ansonsten ist es Englisch geblieben.
Eine leere UF erstellen und folgendes in den Code Teil kopieren:

Option Explicit
Dim comSampleBtn() As clsClickEventsComBut 'Array mit dem Namen der Klasse als Datentyp
Private Sub UserForm_Initialize()
Dim comButTemp As MSForms.CommandButton 'Temporaerer Button
Dim commandButtonIndex As Byte 'Aktueller Button
Dim btnCount As Byte 'Anzahl der gewuenschten Buttons
btnCount = 3 'Anzahl der gewuenschten Buttons festlegen (sinnvoll für dieses Beispiel zwischen 1 und 5)
ReDim comSampleBtn(btnCount) 'Array mit der festgelegten Anzahl von Buttons dimensionieren
'Schleife fuer alle zu platzierenden Buttons
For commandButtonIndex = 1 To btnCount
'Button als temporaeren Button erstellen
Set comButTemp = Me.Controls.Add("Forms.commandbutton.1", "CommandButton" & commandButtonIndex, True)
With comButTemp
'Button platzieren
.Left = 50
.Top = 25 * commandButtonIndex 'für Platzierung untereinander
.Height = 20
.Width = 100
.Caption = "Sample Button " & commandButtonIndex
End With
'Ein Element vom Datentyp unserer Klasse ins Array aufnehmen
Set comSampleBtn(commandButtonIndex) = New clsClickEventsComBut
'Temporaeren Button und Event (siehe Klasse) in Array zusammenfueren
Set comSampleBtn(commandButtonIndex).ComButSample = comButTemp
'Den temporaeren Button loeschen
Set comButTemp = Nothing
Next commandButtonIndex
End Sub
Ein Klassenmodul mit dem Namen clsClickEventsComBut anlegen und folgenden Code reinkopieren:

Option Explicit
Public WithEvents ComButSample As MSForms.CommandButton
Private Sub ComButSample_Click()
MsgBox "You clicked the sample button: " & UserForm1.ActiveControl.Name & Chr(13) & "With the caption: " & UserForm1.ActiveControl.Caption
End Sub
Die UF kann einfach über den "Play" Button in der IDE gestartet werden. Die Kommentare sollten zur Erklärung ausreichen.
Viele Grüße,
Zwenn
PS: Das ist der Thread auf SO:
https://stackoverflow.com/questions/58801868/add-click-method-to-dyn-button-at-vba-not-work/58803508#58803508
Anzeige
AW: VBA dynamische Userform mit Radio-Button
24.06.2022 11:10:30
Joschi
Hallo Zwenn.
Danke für Deine Mühe. Aber ich wollte eine Lösung über Radio-Button.
Wenn der Joschi sich etwas in den Kopf gesetzt hat, dann gibt er keine Ruhe, bis er die Lösung gefunden hat.
Inzwischen habe ich eine lauffähige Lösung mit Radio-Buttons. Mein Problem ist damit erledigt.
Gruß Joschi
Anzeige
AW: VBA dynamische Userform mit Radio-Button
24.06.2022 11:24:38
Zwenn
Hi Joschi,
mein Ziel war nicht Dir eine schlüsselfertige Lösung zu liefern. Ich habe das gepostet, weil ich das Beispiel mit den Buttons hatte und es nur etwas erweitern musste. Die Mechanik ist für alle Steuerelemente gleich. Du kannst damit genauso Radio Buttons, Textboxen und alles sonstige dynamisch verwalten. Ein Algorithmus ist nicht dafür da ein spezielles Problem zu lösen, sondern eine Problemklasse. Ganz egal, was Du Dir in den Kopf setzt.
Viele Grüße,
Zwenn
Anzeige
AW: VBA dynamische Userform mit Radio-Button
24.06.2022 11:06:22
Joschi
Hallo Uwe.
Ich verstehe Deine Frage nach einer Beispieldatei nicht; ich hatte doch den betreffenden Code bereitgestellt. Den in eine leere Mappe einzufügen und zu testen dürfte doch kein Problem gewesen sein.
Gruß Joschi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Dynamische Userform mit Radio-Buttons in VBA


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Öffne Excel und gehe zur Entwicklertools-Registerkarte. Wähle „Visual Basic“ und füge eine neue Userform hinzu.

  2. Radio-Buttons hinzufügen: Wähle die „Option Button“-Steuerelemente aus der Toolbox und füge diese auf der Userform hinzu. Dies sind deine vba radio buttons.

  3. Command-Button einfügen: Füge auch einen CommandButton hinzu, um eine Abbruchfunktion zu erstellen.

  4. Code für die Userform: Doppelklicke auf die Userform, um den Code-Editor zu öffnen. Füge folgenden Code ein, um die Auswahl der Radio-Buttons zu erkennen:

    Private Sub CommandButton1_Click() ' Abbrechen
       Unload Me
    End Sub
    
    Private Sub OptionButton1_Click()
       MsgBox "Option 1 ausgewählt"
    End Sub
    
    Private Sub OptionButton2_Click()
       MsgBox "Option 2 ausgewählt"
    End Sub
  5. Userform anzeigen: Um die Userform anzuzeigen, kannst du folgendes Makro verwenden:

    Sub ShowUserForm()
       UserForm1.Show
    End Sub
  6. Testen: Starte das Makro, um die Userform anzuzeigen und teste die Funktionalität der Radio-Buttons.


Häufige Fehler und Lösungen

  • Fehler: Radio-Buttons funktionieren nicht
    Lösung: Überprüfe, ob die Radio-Buttons korrekt gruppiert sind. Verwende vba radio button group, um sicherzustellen, dass die Auswahl richtig funktioniert.

  • Fehler: Userform lässt sich nicht schließen
    Lösung: Stelle sicher, dass der Code für den Command-Button korrekt implementiert ist, um die Userform zu entladen.


Alternative Methoden

  • Verwendung von ListBox oder ComboBox: Anstatt viele Radio-Buttons zu verwenden, kannst du auch eine ListBox oder ComboBox nutzen. Diese Steuerelemente sind einfacher zu handhaben und können dynamisch mit Optionen gefüllt werden.

  • Dynamische Steuerelemente: Du kannst in Excel VBA auch dynamische Radio-Buttons erstellen. Dazu benötigst du Kenntnisse in der Klassenprogrammierung, um Events für die Radio-Buttons zu verwalten.


Praktische Beispiele

Ein einfaches Beispiel für die Verwendung von Radio-Buttons in einer Userform könnte so aussehen:

Private Sub UserForm_Initialize()
    OptionButton1.Caption = "Option 1"
    OptionButton2.Caption = "Option 2"
End Sub

Private Sub CommandButton1_Click() ' Bestätigen
    If OptionButton1.Value Then
        MsgBox "Option 1 ist gewählt."
    ElseIf OptionButton2.Value Then
        MsgBox "Option 2 ist gewählt."
    Else
        MsgBox "Keine Option gewählt."
    End If
End Sub

Hier wird bei Betätigung des Bestätigungsbuttons die gewählte Option ausgegeben.


Tipps für Profis

  • Verwende Arrays für Radio-Buttons: Um die Handhabung von mehreren Radio-Buttons zu erleichtern, kannst du diese in ein Array einlesen. Dies macht die Auswertung der Ereignisse einfacher.

  • Klassenprogrammierung nutzen: Wenn du dynamische Elemente erstellen möchtest, solltest du dich mit Klassenprogrammierung beschäftigen. Dies ermöglicht die einfache Verwaltung von Events für dynamisch erstellte Steuerelemente.


FAQ: Häufige Fragen

1. Wie füge ich einen Radio-Button in Excel ein?
Du kannst einen Radio-Button über die Entwicklertools-Registerkarte in die Userform einfügen. Wähle einfach das „Option Button“-Steuerelement aus der Toolbox.

2. Was ist der Unterschied zwischen Radio-Buttons und Checkboxes?
Radio-Buttons erlauben nur eine Auswahl aus mehreren Optionen, während Checkboxes mehrere Auswahlmöglichkeiten gleichzeitig zulassen.

3. Wie kann ich die Position des ausgewählten Radio-Buttons zurückgeben?
Du kannst die .Value Eigenschaft nutzen, um herauszufinden, welcher Radio-Button ausgewählt wurde, und dann die Position im Array zurückgeben.

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