Anzeige
Archiv - Navigation
1612to1616
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

ButtonArray Caption über zweite Button

ButtonArray Caption über zweite Button
19.03.2018 06:41:05
Antonio
Hallo,
ich habe eine Reihe Buttons die ich zur Laufzeit erstelle, und eine zweite Reihe Buttons, auch zur Lauzeit geladen, die ich beim clicken auf ein Button der erste Reihen benennen möchte.
Hier mein Code für die Buttons ( Danke an Luschi ) :
                                                                '###### Button Array 1 #####
Private Sub UserForm_Initialize()
Dim ctrl As MSForms.Control
Dim Obj As Control
Dim i As Long
Dim myClass1 As clsButtonArray1
Set myColl1 = New Collection
Dim myClass2 As clsButtonArray2
Set myColl2 = New Collection
Dim a As Integer, j As Integer, k As Integer, t As Integer
k = 1 'Spalte
j = 1 'Zeile
t = 10 'Anzahl Tasten in Zeile
For i = 1 To 60
Set ctrl = Me.Frame1.Controls.Add("Forms.CommandButton.1", "myCmd1" & i, True)
With ctrl
.Tag = i
'            .Caption = "cmdButton " & Format(i, CStr("00"))
.Left = k * 50.6 - 50.6
.Height = 20
.Width = 50.6
.Top = j * 20 - 20
.BackColor = &H80000002
.Font.Size = 9
End With
k = k + 1
If i Mod t = 0 Then
j = j + 1 'nächste Zeile
k = 1
End If
Set myClass1 = New clsButtonArray1
Set myClass1.myCmd1 = ctrl
myColl1.Add myClass1
'    For Each Obj In Me.Frame1.Controls      'Button1 Name Vergeben
'    If Obj.Name = "myCmd1" & i Then
'        Obj.Caption = Sheets("Tabelle6").Range("A" & i).Value
'   End If
'    With myCmd2
'        Select Case .Name
'           Case "C"
'           Obj.Caption = Sheets("Tabelle6").Range("A" & i).Value
''           Case "C#"
''           Obj.Caption = Sheets("Tabelle6").Range("C" & i).Value
''           Case "Db"
''           Obj.Caption = Sheets("Tabelle6").Range("E" & i).Value
''           Case "D"
''           Obj.Caption = Sheets("Tabelle6").Range("G" & i).Value
'        End Select
'    End With
'   If (myCmd2.Caption) = "C" Then
'  Obj.Caption = Sheets("Tabelle3").Range("C" & i).Value
'   End If
'    Next Obj
Next i
'###### Button Array 2 ######
For i = 1 To 13
Set ctrl = Me.Frame2.Controls.Add("Forms.CommandButton.1", "myCmd2" & i, True)
With ctrl
.Tag = i
.Caption = "cmdButton " & Format(i, CStr("00"))
.Left = i * 41 - 41
.Height = 48
.Width = 43
.Top = -3
.BackColor = &HFF0000
.ForeColor = vbWhite
.Font.Size = 10
'    If .Tag = 2 Then 'C#/Db  ' Button Position in Frame2
'        .Left = 42
'    End If
End With
Set myClass2 = New clsButtonArray2
Set myClass2.myCmd2 = ctrl
myColl2.Add myClass2
For Each Obj In Me.Frame2.Controls      'Button2 Name Vergeben
If Obj.Name = "myCmd2" & i Then
Obj.Caption = Sheets("Tabelle1").Range("A" & i).Value
End If
Next Obj
Next i
End Sub
Hier mein Code in ein Klassenmodul:
Option Explicit
Public WithEvents myCmd2 As MSForms.CommandButton
Public WithEvents myCmd1 As MSForms.CommandButton
Private Sub myCmd2_Click()
Dim ctrl As MSForms.Control
Dim Obj As Control
Dim i As Long
Worksheets("Tabelle6").Activate
ActiveSheet.Cells(1, 11).Value = myCmd2.Caption
For Each Obj In UserForm1.Frame1.Controls
If Obj.Name = "myCmd1" & i Then
'        Obj.Caption = Sheets("Tabelle6").Range("A" & i).Value
'   End If
With myCmd2
Select Case .Caption
Case "C"
myCmd1.Caption = Sheets("Tabelle6").Range("A" & i).Value
''           Case "C#"
''           Obj.Caption = Sheets("Tabelle6").Range("C" & i).Value
''           Case "Db"
''           Obj.Caption = Sheets("Tabelle6").Range("E" & i).Value
''           Case "D"
''           Obj.Caption = Sheets("Tabelle6").Range("G" & i).Value
End Select
End With
End If
Next Obj
End Sub
Nach etliche Versuche das ist mein lezter Stand, Klappt nicht, die Buttons bekommen keine Beschriftung.
Was mache ich falsch?
Danke in Voraus für die Hilfestellung.
Antonio

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ButtonArray Caption über zweite Button
19.03.2018 07:09:55
Luschi
Hallo Antonio,
eine Musterdatei würde sich das viel schneller klären lassen, 'wo der Hase im Pfeffer liegt'.
Gruß von Luschi
aus klein-Paris
Musterdatei
20.03.2018 06:24:55
Antonio
Hallo Luschi,
wollte nur wissen ob du dabei bist oder ob duwenig Zeit hast.
Antonio
AW: ButtonArray Caption über zweite Button
21.03.2018 09:59:14
mmat
Hallo Antonio,
das folgende Dings ist ein Musterbeispiel wie Knöpfe erzeugt werden, die wiederum Knöpfe erzeugen. Passt nicht ganz zu deinem Vorhaben, aber das verstehe ich halt nicht.
Benötigt wird lediglich ein ausreichend großes Form mit einem Label am unteren Rand. Ein Klick auf das Form erzeugt einen Knopf oben, ein Klick auf den erzeugten Knopf erzeugt weitere in der Mitte.
Isses das so ungefähr ?
Der Code zum Form:
Option Explicit
Dim oEvents As New Collection
Private Sub UserForm_Click()
Dim k As Klasse1
Dim idx As Long, s As String
idx = Val(Me.Tag) + 1: If idx > 8 Then MsgBox "Mehr wie 8 gibt's net": Exit Sub Else Me.Tag =  _
CStr(idx)
s = "Knopf" & Format(idx, "000")
Set k = New Klasse1
Set k.Knopf = Me.Controls.Add("Forms.CommandButton.1", s, True)
k.Knopf.Caption = s: k.ID = s
k.Knopf.Width = 60
k.Knopf.Left = (idx - 1) * 60
oEvents.Add k
End Sub
Public Sub Knopfgedrueckt(ID As String)
Dim i As Long
If Left(ID, 5) = "Knopf" Then
SuppKnoepfe Val(Right(ID, 3))
Else
Label1.Caption = "Hallo hier " + ID
End If
End Sub
Private Sub SuppKnoepfe(i As Long)
Dim k As Klasse1
Dim t As Long, n As Long, s As String
t = (i - 1) * 25 + 30
For n = 1 To 5
s = "Supp" + Format(i, "000") + Format(n, "000")
Set k = New Klasse1
Set k.Knopf = Me.Controls.Add("Forms.CommandButton.1", s, True)
k.Knopf.Caption = s: k.ID = s
k.Knopf.Width = 60
k.Knopf.Left = (n - 1) * 60
k.Knopf.Top = t
oEvents.Add k
Next
End Sub
Das Klassenmodul
Option Explicit
Public WithEvents Knopf As MSForms.CommandButton
Public ID As String
Private Sub Knopf_Click()
UserForm1.Knopfgedrueckt ID
End Sub

Anzeige
AW: ButtonArray Caption über zweite Button
21.03.2018 11:55:27
Antonio
Hallo mmat,
danke für dein Beispiel.
Ich poste mal ein Bild der Form:
Userbild
Wie du sehen kannst " myCmd2 sind auf der Form, beschriftet "
" myCmd1 sind auch auf der Form, unbeschriftet.
So, wenn ich auf ein button Bsp.: "C" drucke, dann sollen die myCmd1 button beschriftet werden _ aus der Tabelle3 :

Case "C"
Obj.Caption = Sheets("Tabelle3").Range("A" & i).Value
.
bei mir passiert zur Zeit nichts mit der Beschriftung.
Ich hoffe du weißt was ich meine.
Beispieldatei habe schon gepostet.
Vielen Dank in Voraus
Antonio
Anzeige
AW: ButtonArray Caption über zweite Button
21.03.2018 12:23:21
Antonio
offen gelassen
AW: ButtonArray Caption über zweite Button
21.03.2018 12:51:14
mmat
Hallo Antonio,
sorry, aber mit deiner Datei hab ich mich garnicht beschäftigt. Das übersteigt meine Fähigkeiten dann doch erheblich.
Was ich versucht habe ist einen funktionierenden Lösungsansatz für die dynamische Erstellung von Knöpfen zu liefern, die sich auch beschriften lassen. Darauf basierend kann man (so meine Hoffnung) Lösungsansätze für komplexere Szenarien entwickeln.
AW: ButtonArray Caption über zweite Button
21.03.2018 13:01:12
Antonio
Sorry mmat,
werde mich damit beschäftigen
Danke
Antonio
Interessant
21.03.2018 13:08:17
Antonio
Hallo mmat,
habe gerade dein Code ausprobiert, es ist interessant und glabe etwas daraus zu machen.
Vielen Dank
Antonio
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige