Thema Datum  Von Nutzer Rating
Antwort
Rot Userform um Checkboxen erweitern
22.10.2017 15:02:59 Rüdiger
NotSolved
22.10.2017 15:33:38 Gast7777
NotSolved
22.10.2017 15:42:06 Gast78016
NotSolved
22.10.2017 16:45:52 Rüdiger
NotSolved
22.10.2017 15:51:52 Rüdiger
NotSolved

Ansicht des Beitrags:
Von:
Rüdiger
Datum:
22.10.2017 15:02:59
Views:
1451
Rating: Antwort:
  Ja
Thema:
Userform um Checkboxen erweitern

Hallo,

könnte mir bitte jemand helfen ?

Ich habe eine Eingabemaske für eine simple Exceltabelle erstellt.

Ziel ist es mit dem Userform eine Exceltabelle zu füllen, aber auch gleichzeitig bereits eingetragene Daten mit dem Userform auszulesen.
Ich habe habe jetzt die Tabelle um 10 Spalten erweitert und jede Spalte(nbezeichnung) soll pro Zeile als Checkbox auswählbar sein.

Hier die Ausgangslage:

https://picload.org/view/dgworaga/1.jpg.html

https://picload.org/view/dgworcrl/2.jpg.html

jetzt sollen die Spalten G bis .... noch per Checkbox im Userform an und abwählbar sein und in der Excelliste mit Ja oder Nein ausgegeben werden.

Im Userform selber habe ich bereits 10 Checkboxen und Labelboxen per Multipage hinzugefügt.

Mit fehlt nur noch die Codeänderung:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
Option Explicit
Option Compare Text
 
' ************************************************************************************************
' KONSTANTEN / PARAMETRISIERUNG
' ************************************************************************************************
 
'Wie viele TextBoxen sind auf der UserForm platziert?
Private Const iCONST_ANZAHL_EINGABEFELDER As Integer = 5
 
'In welcher Zeile starten die Eingaben?
Private Const lCONST_STARTZEILENNUMMER_DER_TABELLE As Long = 2
' ************************************************************************************************
' EREIGNISROUTINEN DER USERFORM
' ************************************************************************************************
 
Private Sub CommandButton_4_Click()
Unload Me
End Sub
 
'Neuer Eintrag Schaltfläche Ereignisroutine
Private Sub CommandButton1_Click()
     Call EINTRAG_ANLEGEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub
 
'Löschen Schaltfläche Ereignisroutine
Private Sub CommandButton2_Click()
     Call EINTRAG_LOESCHEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub
 
'Speichern Schaltfläche Ereignisroutine
Private Sub CommandButton3_Click()
     Call EINTRAG_SPEICHERN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub
 
'Beenden Schaltfläche Ereignisroutine
Private Sub CommandButton4_Click()
     Unload Me
End Sub
 
'Klick auf die ListBox Ereignisroutine
Private Sub ListBox1_Click()
     Call EINTRAG_LADEN_UND_ANZEIGEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub
 
'Diese Ereignisroutine wird beim Anzeigen der UserForm ausgeführt
Private Sub UserForm_Activate()
     If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 '1. Eintrag selektieren
End Sub
 
'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird
Private Sub UserForm_Initialize()
     Call LISTE_LADEN_UND_INITIALISIEREN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub
 
 
' ************************************************************************************************
' VERARBEITUNGSROUTINEN
' ************************************************************************************************
 
'Diese Routine wird aufgerufen um die Liste (ListBox1) zu leeren, einzustellen und neu zu füllen
Private Sub LISTE_LADEN_UND_INITIALISIEREN()
   Dim lZeile As Long
   Dim lZeileMaximum As Long
   Dim i As Integer
   
     'Alle TextBoxen leer machen
     For i = 1 To iCONST_ANZAHL_EINGABEFELDER
         Me.Controls("TextBox" & i) = ""
Me.Controls("Checkbox" & i) = ""
     Next i
 
     ListBox1.Clear 'Liste leeren
     
     '4 Spalten einrichten
     'Spalte 1: Zeilennummer des Datensatzes
     'Spalte 2: Name (Spalte A)
     'Spalte 3: Telefon (Spalte B)
     'Spalte 4: E-Mail (Spalte C)
     ListBox1.ColumnCount = 4
     
     'Spaltenbreiten der Liste anpassen (0=ausblenden, nichts=automatisch)
     '"<Breite Spalte 1>;<Breite Spalte 2>;<Breite Spalte 3>;<Breite Spalte 4>"
     ListBox1.ColumnWidths = "0;;;"
     'Feste Breiten: ListBox1.ColumnWidths = "0;100;100;100"
     
     'Um eine Schleife für alle Datensätze zu erhalten, benötigen wir die letzte verwendete Zeile
     lZeileMaximum = Tabelle1.UsedRange.Rows.Count 'Benutzer Bereich auslesen
     
     For lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE To lZeileMaximum
         
         'Nur wenn die Zeile benutzt / nicht leer ist, zeigen wir etwas an:
         If IST_ZEILE_LEER(lZeile) = False Then
             
             'Spalte 1 der Liste mit der Zeilennummer füllen
             ListBox1.AddItem lZeile
             
             'Spalten 2 bis 4 der Liste füllen
             ListBox1.List(ListBox1.ListCount - 1, 1) = CStr(Tabelle1.Cells(lZeile, 1).Text)
             ListBox1.List(ListBox1.ListCount - 1, 2) = CStr(Tabelle1.Cells(lZeile, 2).Text)
             ListBox1.List(ListBox1.ListCount - 1, 3) = CStr(Tabelle1.Cells(lZeile, 3).Text)
         
         End If
         
     Next lZeile
     
End Sub
 
Private Sub EINTRAG_LADEN_UND_ANZEIGEN()
   Dim lZeile As Long
   Dim i As Integer
     
     'Eingabefelder resetten
     For i = 1 To iCONST_ANZAHL_EINGABEFELDER
         Me.Controls("TextBox" & i) = ""
     Next i
     
     'Nur wenn ein Eintrag selektiert/markiert ist
     If ListBox1.ListIndex >= 0 Then
            
         'Die Zeilennummer des Datensatzes steht in der ersten ausgeblendeten Spalte der Liste,
         'somit können wir direkt zugreifen.
         lZeile = ListBox1.List(ListBox1.ListIndex, 0)
         
         For i = 1 To iCONST_ANZAHL_EINGABEFELDER
             Me.Controls("TextBox" & i) = CStr(Tabelle1.Cells(lZeile, i).Text)
      Next i
             
     End If
     
End Sub
 
Private Sub EINTRAG_SPEICHERN()
  Dim lZeile As Long
  Dim i As Integer
  
     'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
     If ListBox1.ListIndex = -1 Then Exit Sub
    
     'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
     lZeile = ListBox1.List(ListBox1.ListIndex, 0)
     
     For i = 1 To iCONST_ANZAHL_EINGABEFELDER
         Tabelle1.Cells(lZeile, i) = Me.Controls("TextBox" & i)
     Next i
     
     'Der Benutzer könnte die angezeigten Werte in der Liste geändert haben,
     'daher aktualisieren wir den ausgewählten Eintrag entsprechend.
     ListBox1.List(ListBox1.ListIndex, 1) = TextBox1
     ListBox1.List(ListBox1.ListIndex, 2) = Textbox2
     ListBox1.List(ListBox1.ListIndex, 3) = TextBox3
     
End Sub
 
Private Sub EINTRAG_LOESCHEN()
  Dim lZeile As Long
   
     'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
     If ListBox1.ListIndex = -1 Then Exit Sub
   
     'Beim Löschen fragen wir zuerst den Benutzer noch einmal sicherheitshalber:
     If MsgBox("Sie möchten den markierten Datensatz wirklich löschen?", _
               vbQuestion + vbYesNo, "Sicherheitsabfrage!") = vbYes Then
   
         'Nur wenn er mit <JA> antwortet, löschen wir auch!
   
         'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
         lZeile = ListBox1.List(ListBox1.ListIndex, 0)
         
         'Die ganze Zeile wird nun gelöscht
         Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete
         
         'Und den Eintrag in der Liste müssen wir auch noch entfernen
         ListBox1.RemoveItem ListBox1.ListIndex
     
     End If
     
End Sub
 
Private Sub EINTRAG_ANLEGEN()
  Dim lZeile As Long
     
     lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE
     'Schleife bis eine leere ungebrauchte Zeile gefunden wird
     Do While IST_ZEILE_LEER(lZeile) = False
         lZeile = lZeile + 1 'Nächste Zeile bearbeiten
     Loop
     
     'Nach Durchlauf dieser Schleife steht lZeile in der ersten leeren Zeile von Tabelle1
     Tabelle1.Cells(lZeile, 1) = CStr("Neuer Eintrag" & lZeile)
     
     'Und neuen Eintrag in die UserForm eintragen
     ListBox1.AddItem lZeile
     ListBox1.List(ListBox1.ListCount - 1, 1) = CStr("Neuer Eintrag" & lZeile)
     ListBox1.List(ListBox1.ListCount - 1, 2) = ""
     ListBox1.List(ListBox1.ListCount - 1, 3) = ""
     
     'Den neuen Eintrag markieren mit Hilfe des ListIndex
     ListBox1.ListIndex = ListBox1.ListCount - 1
     'Durch das Click Ereignis der ListBox werden die Daten automatisch geladen
     
     'Und dem Benutzer direkt noch den Cursor in das erste Eingabefeld stellen und alles vorselektieren,
     'so kann der Benutzer direkt loslegen mit der Dateneingabe.
     MultiPage1.Value = 0
     TextBox1.SetFocus
     TextBox1.SelStart = 0
     TextBox1.SelLength = Len(TextBox1)
     
End Sub
 
 
' ************************************************************************************************
' HILFSFUNKTIONEN
' ************************************************************************************************
 
'Ermittelt, ob eine Zeile in Benutzung ist...
Private Function IST_ZEILE_LEER(ByVal lZeile As Long) As Boolean
   Dim i As Long
   Dim sTemp As String
   
     'Hilfsvariable initialisieren
     sTemp = ""
     
     'Um zu erkennen, ob eine Zeile komplett leer/ungebraucht ist
     'verketten wir einfach alle Spalteninhalte der Zeile miteinander.
     'Ist die zusammengesetzte Zeichenkette aller Spalten leer,
     'ist die Zeile nicht genutzt...
     For i = 1 To iCONST_ANZAHL_EINGABEFELDER
         sTemp = sTemp & Trim(CStr(Tabelle1.Cells(lZeile, i).Text))
     Next i
     
     'Rückgabewert festlegen
     If Trim(sTemp) = "" Then
         'Die Zeile ist leer
         IST_ZEILE_LEER = True
     Else
         'Die Zeile ist mindestens in einer Spalte gefüllt
         IST_ZEILE_LEER = False
     End If
     
End Function

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Userform um Checkboxen erweitern
22.10.2017 15:02:59 Rüdiger
NotSolved
22.10.2017 15:33:38 Gast7777
NotSolved
22.10.2017 15:42:06 Gast78016
NotSolved
22.10.2017 16:45:52 Rüdiger
NotSolved
22.10.2017 15:51:52 Rüdiger
NotSolved