Sub multi_Positionen_erstellen()
Dim m As Integer
Dim n As Integer
For m = 0 To (Anz_Pos - 1)
' Rahmen-Name analog der Positions-Nr.
ctl_Rah(m) = "Frame" & Str(100 + (m + 1) * 10)
' Positionierung der Rahmen
Oben_Rah(m) = (6 + (m * 102))
' Controls-Art Text- oder ComboBox
For n = 0 To 8
If ((n = 4) Or (n = 6)) Then
ctl_Art(m, n) = "ComboBox" & Str(100 + (m + 1) * 10) + (n)
Else
ctl_Art(m, n) = "TextBox" & Str(100 + (m + 1) * 10) + (n)
End If
Next n
Next m
' Positionierung der Text- und Combo-Boxen
Höhe_Box = Array(18, 18, 54, 18, 18, 18, 18, 18, 18)
Links_Box = Array(5, 30, 82, 386, 453, 493, 82, 386, 493)
Oben_Box = Array(15, 15, 15, 15, 15, 15, 72, 72, 72)
Breite_Box = Array(22, 48, 300, 63, 36, 63, 300, 63, 63)
' Positionierung und Beschriftung der Labels
Höhe_Lbl = Array(9, 9, 9, 9, 9, 9, 15, 9, 9)
Links_Lbl = Array(5, 30, 82, 386, 453, 493, 6, 386, 493)
Oben_Lbl = Array(4, 4, 4, 4, 4, 4, 74, 60, 60)
Breite_Lbl = Array(22, 29, 76, 42, 30, 55, 72, 54, 66)
Lbl_Cap = Array("Pos.", "Menge", "Warenbezeichnung", _
"Einzelpreis", "Einheit", "Gesatpreis", _
"Ergänzungszeile", "Einzelpreis EZ", "Gesamtpreis EZ")
' Gesamt-Rahmen Scroll-Bereich festlegen
Positionen.Frame100.ScrollHeight = 103 * Anz_Pos
For m = 0 To (Anz_Pos - 1)
' Positions-Rahmen erstellen
Set new_ctl = Positionen.Controls("Frame100") _
.Controls.Add("Forms.Frame.1", ctl_Rah(m), True)
new_ctl.Move Left:=6, Top:=Oben_Rah(m), Width:=564, Height:=96
' Control Text- bzw. Combo-Box erstellen und positionieren
For n = 0 To 8
If ((n = 4) Or (n = 6)) Then
Set new_ctl = Positionen.Controls(ctl_Rah(m)) _
.Controls.Add("Forms.ComboBox.1", ctl_Art(m, n), True)
Else
Set new_ctl = Positionen.Controls(ctl_Rah(m)) _
.Controls.Add("Forms.TextBox.1", ctl_Art(m, n), True)
End If
new_ctl.Move Left:=Links_Box(n), Top:=Oben_Box(n), _
Width:=Breite_Box(n), Height:=Höhe_Box(n)
With new_ctl
.Font.Size = 10
.Text = ctl_Art(m, n)
If n = 0 Then
.Text = Format((m + 1), "0#")
.Enabled = False
End If
End With
' Control Label erstellen, positionieren und beschriften
Set new_ctl = Positionen.Controls(ctl_Rah(m)) _
.Controls.Add("Forms.Label.1", "Label" & n, True)
new_ctl.Move Left:=Links_Lbl(n), Top:=Oben_Lbl(n), _
Width:=Breite_Lbl(n), Height:=Höhe_Lbl(n)
With new_ctl
.Caption = Lbl_Cap(n)
If n = 6 Then
.SpecialEffect = fmSpecialEffectEtched
.TextAlign = fmTextAlignCenter
End If
End With
Next n
Next m
End Sub
Nun werden in die einzelnen Text- und Combobexen Werte eingetragen:
Sub multi_Positionen_eintragen() ' Werte in Text- und Combo-Boxen eintragen
Dim m As Integer
Dim n As Integer
Dim Zeile As Integer
Zeile = DatenZeile1
For m = 0 To (Anz_Pos - 1)
For n = 1 To 8
Positionen.Controls(ctl_Art(m, n)).Text = Cells(Zeile, n + 21)
Next n
Zeile = Zeile + 1
Next m
End Sub
Wie kann ich aber jetzt für jede Text- oder ComboBox, sofern diese verändert wurde, ein Change-Ereignis erzeugen um die Daten entsprechend neu zu berechnen und wieder in die Tabelle zu schreiben?
Das Ganze soll wie gesagt nicht am Ende durch einen Button "neu berechnen" o.ä. erfolgen, sondern fortlaufend bei jeder Änderung in der UserForm neu dargestellt und gegebenen Falls auch neu berechnet werden.
Das einzige was mir dazu einfällt ist ein Change_Ereignis, aber dies habe ich nicht hinbekommen.
Viele Grüße
Thomas