Anzeige
Archiv - Navigation
1880to1884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

UF btn mit loop erstellt jetzt anspreche

UF btn mit loop erstellt jetzt anspreche
13.05.2022 11:59:23
JoTu
Hallo,
Ich habe eine Liste mit Datum (Spalte "A") und Namen (Spalte "B"). In einer Userform sollen alle Namen als Buttons angezeigt werden. Dazu habe ich eine Schleife gebaut, die die Buttons erstellt und gruppiert. Parallel dazu sind den Namen Monate aus Spalte "A" zugeordnet. Meine Idee: Wenn ich in der Userform den Button mit dem Namen anklicke, dann erscheint eine zweite Button-Gruppe mit den dem Namen zugehörigen Monaten.
Problem: Ich kann die Buttons gerade nicht ansprechen (Button_Click), weil sie ja eigentlich nicht existieren, sondern erst durch UserForm_Initalize erstellt werden. Gibt es evtl. einen Weg über Function, das dennoch zu lösen? Ich nehme auch gern Verweise entgegen, mit welchen Methoden das möglich ist. Ich habe dazu leider bisher keine gefunden. Codes freuen mich natürlich auch...
Meine Arbeitsmappe:
https://www.herber.de/bbs/user/153049.xlsm
Mein Code für die UserForm:

Private Sub UserForm_Initialize()
Dim wb As Workbook
Set wb = ActiveWorkbook
Dim ws As Worksheet
Set ws = wb.ActiveSheet
Dim opt As Control
Dim i As Integer
i = 0
lrow = ws.Cells(Rows.Count, 27).End(xlUp).Row - 1
mrow = ws.Cells(Rows.Count, 28).End(xlUp).Row
For k = 2 To lrow 'Button Namen erstellen
Set opt = UserForm1.Controls.Add("Forms.OptionButton.1", "radioBtn" & i, True)
opt.Caption = ws.Cells(k, 27).Value
opt.Top = opt.Height * i
opt.GroupName = "name"
opt.Left = 10
Me.Width = 200
mehght1 = 40 + opt.Height * (i + 3)
i = i + 1
Next k
' (!) Der folgende Part soll eigentlich ausgeführt werden, wenn ein Button von oben angeklickt wird. Also wenn ich "Thomas" anklicke, dann sollen nur die Monate für Thomas erscheinen. Der Code um die Monate zu extrahieren steht unten bzw. siehe Arbeitsmappe.
i = 0
Dim m As Integer
For m = 2 To mrow 'Button Monate erstellen
Set opt = UserForm1.Controls.Add("Forms.OptionButton.1", "radioBtn" & i, True)
opt.Caption = Format(ws.Cells(m, 28).Value, "mmmm")
opt.Top = opt.Height * i
opt.GroupName = "monat"
opt.Left = 128
Me.Width = 200
mehght2 = 40 + opt.Height * (i + 3)
i = i + 1
Next m
If mehght1 > mehght2 Then
mehght = mehght1
Else: mehght = mehght2
End If
Me.Height = mehght
Me.CommandButton1.Top = Me.Height - 70
Me.CommandButton1.Left = 10
Me.CommandButton2.Top = Me.Height - 70
Me.CommandButton2.Left = Me.CommandButton1.Left + Me.CommandButton1.Width + 10
End Sub
Code für die Erstellung der Monate. Dieser solle eigentlich laufen, wenn ich einen Button anklicke. Aktuell filtert er zu Testzwecken nur einen konkreten Namen, soll sich aber eigentlich auf die Aktivierung eines Buttons beziehen. Der Name würde dann durch die Caption des aktiven Buttons ersetzt werden.

Private Sub CommandButton2_Click()
Dim wb As Workbook
Set wb = ActiveWorkbook
Dim ws As Worksheet
Set ws = wb.Sheets(1)
Dim lrow As Integer: lrow = Cells(Rows.Count, 1).End(xlUp).Row
Dim rng As Range: Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lrow, 2))
Dim x As Integer: x = 0
Dim i As Integer
Dim MonArr() As Variant
For i = 1 To rng.Rows.Count
If rng.Cells(i, 2).Value = "Thomas" Then
Dim dat As Date: dat = rng.Cells(i, 1).Value 'Datum ermitteln
Dim mon As String: mon = Month(dat)
Dim val As String
If Len(mon) = 1 Then
val = ".0" & mon & "."
ElseIf Len(mon) = 2 Then
val = "." & mon & "."
End If
Dim srch As Variant: srch = Filter(MonArr, val) 'Monate vergleichen
If x = 0 Then
GoTo weiter
Else:
If UBound(srch) > -1 Then
Else:
weiter:
ReDim Preserve MonArr(x) 'Array füllen
MonArr(x) = rng.Cells(i, 1).Value
End If
End If
x = x + 1
val = ""
End If
Next
For i = 0 To x - 1
ws.Cells(i + 2, 28).Value = MonArr(i)
ws.Cells(i + 2, 28).NumberFormat = "mmmm"
Next i
ws.Range(ws.Cells(2, 28), ws.Cells(x + 4, 28)).Sort Key1:=Range("AB" & "2"), Order1:=xlAscending
End Sub
Besten Dank für alle Vorschläge :)

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UF btn mit loop erstellt jetzt anspreche
13.05.2022 12:06:16
Rudi
Hallo,
ich würde die Namen in eine Listbox schreiben.
Ansonsten brauchst du für die OptionButtons eine eigene Klasse.
Gruß
Rudi
AW: UF btn mit loop erstellt jetzt anspreche
13.05.2022 12:16:52
JoTu
Wow, da habe ich ja viiiel zu kompliziert gedacht... Das geht wirklich deutlich einfacher. Danke für den Tipp :)
Problem gelöst...
AW: UF btn mit loop erstellt jetzt anspreche
13.05.2022 12:07:55
JoTu
Oh, ich habe eben gesehen, dass der Button zum Öffnen der Userform das aktuell nicht macht. Also einfach ein "Userform1.Show" bei "Button2_click" dazu denken. Das habe ich aus praktischen Gründen zum Testen des Codes entfernt...
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige