Events bei dynamischen Userforms
27.06.2016 05:07:35
Berndi
Ich erzeuge mit diesem Script ein dynamisches Formular mit Checkboxen und Textfeldern.
Leider kann ich nur beim zuletzt erzeugten ein Event abgreifen.
Wie schaffe ich das bei allen Elementen?
Option Explicit
Dim chkVBEvent As clsChk_VB
Dim chkBox_VB As MSForms.CheckBox
Dim chkBGEvent As clsChk_BG
Dim chkBox_BG As MSForms.CheckBox
Dim chkVBColl As Collection
Dim chkBGColl As Collection
Sub EditPartnergesellschaftenInit()
Dim I
Dim Datenbank As Worksheet
Dim objCls As clsTxt
Dim objCls2 As clsChk_VB
Dim objCls3 As clsChk_BG
Set Datenbank = Workbooks("GesFordVerb.xlam").Worksheets("Partnergesellschaften")
With DatenbankForm
.KeepScrollBarsVisible = fmScrollBarsVertical
.ScrollBars = fmScrollBarsVertical
.ScrollHeight = Datenbank.Cells(1, 6) * 22 + 50
.Height = 600
.Width = 540
.Label1 = "Datenbank " & Chr(34) & "Partnergesellschaften" & Chr(34)
.Label1.Width = 520
.Caption = "Datenbank - Bearbeitungsfenster"
End With
Datenbank.Cells(1, 7).Value = "OnAction"
For I = 2 To Datenbank.Cells(1, 6)
Set objCls = New clsTxt
Set objCls.cntrTxt = DatenbankForm.Controls.Add("Forms.TextBox.1", "Nummer_" & I, True)
With objCls.cntrTxt
.Left = 10
.Top = 15 + I * 22
.Width = 60
.Height = 22
.Value = Datenbank.Cells(I, 1).Value
.Font.Name = "Arial"
.Font.Size = 11
.TextAlign = fmTextAlignRight
.Locked = True
End With
Set objCls.cntrTxt = DatenbankForm.Controls.Add("Forms.TextBox.1", "Text_" & I, True)
With objCls.cntrTxt
.Left = 80
.Top = 15 + I * 22
.Width = 320
.Height = 22
.Value = Datenbank.Cells(I, 2).Value
.Font.Name = "Arial"
.Font.Size = 11
.Locked = False
End With
Set chkBox_VB = DatenbankForm.Controls.Add("Forms.CheckBox.1", "VB_" & I, True)
With chkBox_VB
.Left = 410
.Top = 15 + I * 22
.Caption = "Verbund"
End With
Set chkBox_BG = DatenbankForm.Controls.Add("Forms.CheckBox.1", "BG_" & I, True)
With chkBox_BG
.Left = 460
.Top = 15 + I * 22
.Caption = "Beteiligung"
End With
If Datenbank.Cells(I, 5).Value = "VB" Then
chkBox_VB.Value = True
chkBox_BG.Value = False
End If
If Datenbank.Cells(I, 5).Value = "BG" Then
chkBox_VB.Value = False
chkBox_BG.Value = True
End If
Set chkVBEvent = New clsChk_VB
Set chkVBEvent.cntrChk_VB = Me.Controls(chkBox_VB.Value)
Set chkBGEvent = New clsChk_BG
Set chkBGEvent.cntrChk_BG = Me.Controls(chkBox_BG.Value)
chkVBColl.Add chkVBEvent
chkBGColl.Add chkBGEvent
Next I
Datenbank.Cells(1, 7).Value = ""
DatenbankForm.StartUpPosition = 2
DatenbankForm.Show
End Sub