Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1228to1232
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

Automatisch generierten CommandButton Code zuw.

Automatisch generierten CommandButton Code zuw.
Peter
Hallo alle zusammen,
ich versuche seit Stunden per INet Recherche und in meinen zahlreichen Excel VBA Büchern eine Lösung für mein Problem zu finden. Leider erfolglos.
Ich habe eine UserForm erstellt in welcher ich eine ganze Reihe von Einträgen auflisten lasse. Zu jedem Eintrag wird ein CommandButton eingeblendet mit dessen Hilfe man einen Bildpfad dem jeweiligen Datensatz zuordnen können soll. Wenn man auf den Button klickt soll ein Input-Feld geöffnet werden, in das man per Drag and Drop die Datei einfach fallen lässt und der Dateipfad wird automatisch eingelesen. All diese einzelkomponenten funktionieren bestens.
Doch leider schaffe ich es nicht, -da ich es auch noch nie gemacht habe- den automatisch generiertem CB einen Code zuzuweisen. Könnte mir hier bitte jemand helfen?
Danke schon mal
VG Peter

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

Betreff
Benutzer
Anzeige
AW: Automatisch generierten CommandButton Code zuw.
17.09.2011 16:58:17
Josef

Hallo Peter,
dazu benötigst du eine Klasse.
Vom Prinzip her, geht das so, wobei die Zuweisung der Buttons an die Klasse natürlich an deine Gegebenheiten angepasst werden muss.

' **********************************************************************
' Modul: clsUF_Events Typ: Klassenmodul
' **********************************************************************

'Klassenmodul clsUF_Events

Option Explicit

Private WithEvents m_UserForm As MSForms.UserForm
Private WithEvents m_TextBox As MSForms.TextBox
Private WithEvents m_Label As MSForms.Label
Private WithEvents m_ComboBox As MSForms.ComboBox
Private WithEvents m_ListBox As MSForms.ListBox
Private WithEvents m_CheckBox As MSForms.CheckBox
Private WithEvents m_OptionButton As MSForms.OptionButton
Private WithEvents m_CommandButton As MSForms.CommandButton

Public Function setCntrl(cntrl As Object) As Object
  Set setCntrl = Nothing
  
  If TypeOf cntrl Is MSForms.Label Then
    Set m_Label = cntrl
    Set setCntrl = Me
  ElseIf TypeOf cntrl Is MSForms.TextBox Then
    Set m_TextBox = cntrl
    Set setCntrl = Me
  ElseIf TypeOf cntrl Is MSForms.CommandButton Then
    Set m_CommandButton = cntrl
    Set setCntrl = Me
  ElseIf TypeOf cntrl Is MSForms.UserForm Then
    Set m_UserForm = cntrl
    Set setCntrl = Me
  ElseIf TypeOf cntrl Is MSForms.ComboBox Then
    Set m_ComboBox = cntrl
    Set setCntrl = Me
  ElseIf TypeOf cntrl Is MSForms.ListBox Then
    Set m_ListBox = cntrl
    Set setCntrl = Me
  ElseIf TypeOf cntrl Is MSForms.CheckBox Then
    Set m_CheckBox = cntrl
    Set setCntrl = Me
  ElseIf TypeOf cntrl Is MSForms.OptionButton Then
    Set m_OptionButton = cntrl
    Set setCntrl = Me
  End If
End Function


Private Sub m_CommandButton_Click()
  'dein Code
End Sub


' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

'Klassenmodul des UserForm

Option Explicit

Private UF_Events() As clsUF_Events

Private Sub UserForm_Initialize()
  Dim objCntrl As Control
  Dim lngIndex As Long
  
  Redim Preserve UF_Events(lngIndex)
  Set UF_Events(lngIndex) = New clsUF_Events
  UF_Events(lngIndex).setCntrl Me
  
  For Each objCntrl In Me.Controls
    lngIndex = lngIndex + 1
    Redim Preserve UF_Events(lngIndex)
    Set UF_Events(lngIndex) = New clsUF_Events
    UF_Events(lngIndex).setCntrl objCntrl
  Next
End Sub



« Gruß Sepp »

Anzeige
AW: Automatisch generierten CommandButton Code zuw.
18.09.2011 11:35:03
Peter
Vielen vielen herzlichen Dank!
Ich habs hinbekommen.
für alle dies vllt interessieren könnte hier mein Code:
in ein leeres Klassenmodul mit dem Namen CB_Bilder
Option Explicit
Public WithEvents CommandButton As MSForms.CommandButton

Private Sub CommandButton_Click()
Select Case CommandButton.t
Case 1
schalter1
Case 2
schalter2
Case 3
schalter3
End Select
End Sub

in den Code des UF:
Option Explicit
Dim CBCommands() As New CB_Bilder

Private Sub UserForm_Activate()
Dim cntBut As Control
Dim cntTXT As MSForms.Label
Dim intAnzahl As Integer
Dim intZahl As Integer
Dim intAbstand As Integer
Dim intAbstand0 As Integer
Dim b As Integer
Dim k As Integer
Dim i As Integer
Dim a As Integer
ReDim CBCommands(1 To 34)
intAnzahl = 34
intAbstand = 20
intAbstand0 = intAbstand
For k = 1 To 34
If ThisWorkbook.Sheets("Tabelle1").Range("D" & (8 + k))  "" Then
Set cntTXT = Bilder.Controls.Add("Forms.Label.1")
With cntTXT
.Left = 10
.Top = intAbstand
.Width = 100
.Height = 25
.Caption = ThisWorkbook.Sheets("Tabelle1").Range("D" & k )
End With
Set cntBut = Bilder.Controls.Add("Forms.CommandButton.1")
With cntBut
.Left = 110
.Top = intAbstand - 5
.Width = 100
.Height = 18
.Caption = "Bild laden"
End With
Set CBCommands(k).CommandButton = cntBut
Set cntTXT = Bilder.Controls.Add("Forms.Label.1")
cntTXT.Left = 220
cntTXT.Top = intAbstand
cntTXT.Width = 100
cntTXT.Height = 25
If ThisWorkbook.Sheets("Tabelle1").Range("BC" & k + 3).Value  "" Then
cntTXT.Caption = Left(ThisWorkbook.Sheets("Tabelle1").Range("AY" & k + 3).Value, 10) _
Else
cntTXT.Caption = "Kein Bild"
End If
intAbstand = intAbstand + intAbstand0
End If
Next
With Bilder
'           Höhe des Userforms
.Height = 500
'           Scrollbar sichtbar
.KeepScrollBarsVisible = fmScrollBarsVertical
'           Scrollbartyp vertikal
.ScrollBars = fmScrollBarsVertical
'           Höhe des Scrollbereich in Abhängigkeit von der Anzahl der CommandButton
.ScrollHeight = 25 * (k + 1) / (1.15)
End With
End Sub

Ich bin wirklich begeistert von diesem Forum! Da bekommt man ja innerhalb von Minuten eine Antwort!
Vielen Dank nochmal!
Peter
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige