
117553
05.11.2015, aktualisiert um 11:20:15 Uhr
Excel VBA Projekt Userform: Awesenheitsliste Mitarbeiter Problem: Dynamisch erstellte Textboxen speichern
Hallo zusammen!
bräuchte wieder eure hilfe ob unten gezeigte Struktur richtig ist oder ob ich was vergessen habe.
Ich möchte eine Anwesenheitsliste für Mitarbeiter auf Basis Excel 2010 VBA erstellen welche über eine Userform dargestellt wird
- Multipage Januar bis Dezember
innerhalb Multipage:
- Listenfeld für Mitarbeiter Namen
- Listenfeld für Kalendertage etc.
- dynamisch erstellte Textboxen (für jeden Tag / jeden MA)
der Ansatz für die TextBoxen ist dieser
Sub ErstelleTextBox()
Dim i As Integer, ii As Integer, a As Integer
Dim oTXT As MSForms.TextBox
Dim sngLeft As Single, sngTop As Single
Const sW As Single = 70
Const sH As Single = 18
Const sTopErste As Single = 40
Const sLeftErste As Single = 2
Const sAbstand As Single = 2
'If UBound(oTXTClass) > -1 Then
For a = Me.Controls.Count - 1 To 0 Step -1
If Controls(a).Name Like "TempTextBox*" Then
Me.Controls.Remove Controls(a).Name
End If
Next a
a = 0
'End If
Erase oTXTClass
For ii = 1 To CInt(ComboBox2)
For i = 1 To CInt(ComboBox1)
Set oTXT = Controls.Add("Forms.TextBox.1", "TempTextBox" & a, True)
With oTXT
If ii = 1 And i = 1 Then
.Top = sTopErste: .Left = sLeftErste: .Width = sW: .Height = sH
Else
.Top = sngTop: .Left = sngLeft: .Width = sW: .Height = sH
End If
ReDim Preserve oTXTClass(a)
Set oTXTClass(a).TXT_Class = oTXT
a = a + 1
If i < ComboBox1 Then
sngTop = .Top + .Height + sAbstand
sngLeft = .Left
Else
sngTop = sTopErste
sngLeft = .Left + .Width + sAbstand
End If
End With
Next i
Next ii
If CInt(ComboBox1) > 11 Then
Me.ScrollBars = fmScrollBarsVertical
Me.ScrollHeight = oTXT.Top + oTXT.Height + sAbstand
Else
Me.ScrollBars = fmScrollBarsNone
End If
End Sub
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then ErstelleTextBox
End Sub
Private Sub ComboBox2_Change()
If ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then ErstelleTextBox
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 100
ComboBox1.AddItem i
If i < 7 Then ComboBox2.AddItem i
Next i
End Sub
Private Sub UserForm_Terminate()
Erase oTXTClass
End Sub
bräuchte wieder eure hilfe ob unten gezeigte Struktur richtig ist oder ob ich was vergessen habe.
Ich möchte eine Anwesenheitsliste für Mitarbeiter auf Basis Excel 2010 VBA erstellen welche über eine Userform dargestellt wird
- Multipage Januar bis Dezember
innerhalb Multipage:
- Listenfeld für Mitarbeiter Namen
- Listenfeld für Kalendertage etc.
- dynamisch erstellte Textboxen (für jeden Tag / jeden MA)
- diese müssten sich speichern und immer dargestellt sein ===> Problem
der Ansatz für die TextBoxen ist dieser
Sub ErstelleTextBox()
Dim i As Integer, ii As Integer, a As Integer
Dim oTXT As MSForms.TextBox
Dim sngLeft As Single, sngTop As Single
Const sW As Single = 70
Const sH As Single = 18
Const sTopErste As Single = 40
Const sLeftErste As Single = 2
Const sAbstand As Single = 2
'If UBound(oTXTClass) > -1 Then
For a = Me.Controls.Count - 1 To 0 Step -1
If Controls(a).Name Like "TempTextBox*" Then
Me.Controls.Remove Controls(a).Name
End If
Next a
a = 0
'End If
Erase oTXTClass
For ii = 1 To CInt(ComboBox2)
For i = 1 To CInt(ComboBox1)
Set oTXT = Controls.Add("Forms.TextBox.1", "TempTextBox" & a, True)
With oTXT
If ii = 1 And i = 1 Then
.Top = sTopErste: .Left = sLeftErste: .Width = sW: .Height = sH
Else
.Top = sngTop: .Left = sngLeft: .Width = sW: .Height = sH
End If
ReDim Preserve oTXTClass(a)
Set oTXTClass(a).TXT_Class = oTXT
a = a + 1
If i < ComboBox1 Then
sngTop = .Top + .Height + sAbstand
sngLeft = .Left
Else
sngTop = sTopErste
sngLeft = .Left + .Width + sAbstand
End If
End With
Next i
Next ii
If CInt(ComboBox1) > 11 Then
Me.ScrollBars = fmScrollBarsVertical
Me.ScrollHeight = oTXT.Top + oTXT.Height + sAbstand
Else
Me.ScrollBars = fmScrollBarsNone
End If
End Sub
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then ErstelleTextBox
End Sub
Private Sub ComboBox2_Change()
If ComboBox1.ListIndex > -1 And ComboBox2.ListIndex > -1 Then ErstelleTextBox
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 100
ComboBox1.AddItem i
If i < 7 Then ComboBox2.AddItem i
Next i
End Sub
Private Sub UserForm_Terminate()
Erase oTXTClass
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 287594
Url: https://administrator.de/forum/excel-vba-projekt-userform-awesenheitsliste-mitarbeiter-problem-dynamisch-erstellte-textboxen-speichern-287594.html
Ausgedruckt am: 03.05.2025 um 03:05 Uhr
13 Kommentare
Neuester Kommentar

Moin,
Schon kurrios was man einer da mit Excel macht obwohl man schon massenweise "Eingabe-Kästchen" in Excel hat und Zellen die sich schützen lassen
. Wäre wohl eher was für Access
Gruß grexit
dynamisch erstellte Textboxen (für jeden Tag / jeden MA)
wenn du sie dynamisch erstellst, warum setzt du dann nicht die ControlSource-Eigenschaft der Textboxen ebenfalls "dynamisch" ?Schon kurrios was man einer da mit Excel macht obwohl man schon massenweise "Eingabe-Kästchen" in Excel hat und Zellen die sich schützen lassen
Gruß grexit

Moin,
machs doch so wie @122990 geschrieben hat..
Gruß jodel32
machs doch so wie @122990 geschrieben hat..
warum setzt du dann nicht die ControlSource-Eigenschaft der Textboxen ebenfalls "dynamisch" ?
Gruß jodel32

Zitat von @117553:
setzt du dann nicht die ControlSource-Eigenschaft der Textboxen ebenfalls "dynamisch" ?
kannst du mir da einen Tip geben, wie das geht?
Siehst du im oben verlinkten Excel-Sheet ...setzt du dann nicht die ControlSource-Eigenschaft der Textboxen ebenfalls "dynamisch" ?
kannst du mir da einen Tip geben, wie das geht?
Hi,
Wie wäre es dann mit MS Access Runtime:
https://www.microsoft.com/de-de/download/details.aspx?id=10910
Gruß
Holli
Access haben leider nicht alle Mitarbeiter Zugriff.
mit der Userform finde ich kann man das halt richtig schön gestalten und verwalten, wie immer nur diese Exceltabellen
mit der Userform finde ich kann man das halt richtig schön gestalten und verwalten, wie immer nur diese Exceltabellen
Wie wäre es dann mit MS Access Runtime:
https://www.microsoft.com/de-de/download/details.aspx?id=10910
Gruß
Holli

Warum neu erstellen, setz doch einfach die ControlSource Eigenschaft neu. D.h. erstelle eine Schleife die alle Textboxen durchläuft und die ControlSource Eigenschaft auf die neuen Bezüge setzt.
for each control in Me.Controls
'...wenn Textbox dann ....
Next

Na ja, ein bisschen nachgedacht und sein Schulwissen über gerade und ungerade Zahlen genutzt, wärst du auch selber auf die Lösung gekommen
In die Schleife mit eingebaut ...
https://msdn.microsoft.com/de-de/library/se0w9esz.aspx
Gruß jodel32
p.s. wann ist hier jetzt Schluss ?
In die Schleife mit eingebaut ...
if (r MOD 2) = 0 then
oTxt.BackColor = RGB(255, 128, 0)
end if
https://msdn.microsoft.com/de-de/library/se0w9esz.aspx
Gruß jodel32
p.s. wann ist hier jetzt Schluss ?