AW: Userformdaten in Tabelle schreiben
09.04.2019 05:11:34
fcs
Hallo Tim,
um die Wochentage effektiv zu prüfen müssen die daten der Checkboxen zunächst in ein Array eingelesen werden.
dannach kann man die Wochentage in einer Schleife abarbeiten/prüfen.
Sieht dann etwa wie folgt aus.
LG
Franz
Sub Kundendaten_speichern()
Dim vntQuelle
Dim lngDS As Long
Dim strVorname As String
Dim strFamilienname As String
Dim strVertrag As String
Dim bolVorhanden As Boolean
Dim arrWoTage(1 To 7, 1 To 3)
Dim bolWochentag As Boolean, intWT As Integer
Dim wksMA As Worksheet
Dim Leerzeile As Long
strVorname = UserForm2.Vorname
strFamilienname = UserForm2.Familienname
strVertrag = UserForm2.Vertrag
'Daten zu Wochentagen setzen/aus Userform einlesen
arrWoTage(1, 1) = UserForm2.Montag: arrWoTage(1, 2) = "Mo": arrWoTage(1, 3) = "Montag"
arrWoTage(2, 1) = UserForm2.Dienstag: arrWoTage(2, 2) = "Di": arrWoTage(2, 3) = "Dienstag"
arrWoTage(3, 1) = UserForm2.Mittwoch: arrWoTage(3, 2) = "Mi": arrWoTage(3, 3) = "Mittwoch"
arrWoTage(4, 1) = UserForm2.Donnerstag: arrWoTage(4, 2) = "Do": arrWoTage(4, 3) = "Donnerstag"
arrWoTage(5, 1) = UserForm2.Freitag: arrWoTage(5, 2) = "Fr": arrWoTage(5, 3) = "Freitag"
arrWoTage(6, 1) = False: arrWoTage(6, 2) = "Sa": arrWoTage(6, 3) = "Samstag"
arrWoTage(7, 1) = False: arrWoTage(7, 2) = "So": arrWoTage(7, 3) = "Sonntag"
Set wksMA = Worksheets("Mitarbeiter")
With wksMA
'Letzte Zeile mit Name
lngDS = .Cells(.Rows.Count, 1).End(xlUp).Row
'vorhandene Daten in Array einlesen
vntQuelle = .Range(.Cells(1, 1), .Cells(lngDS, 13))
'Wochentage abarbeiten
For intWT = 1 To 7
If arrWoTage(intWT, 1) = True Then
bolVorhanden = False
'Prüfen, ob Eintrag schon vorhanden
For lngDS = 1 To UBound(vntQuelle, 1)
If vntQuelle(lngDS, 1) = strVorname & " " & strFamilienname Then
If vntQuelle(lngDS, 2) = strVertrag Then
If vntQuelle(lngDS, 3) = arrWoTage(intWT, 2) Then
bolVorhanden = True
Exit For
End If
End If
End If
Next lngDS
If bolVorhanden = True Then
MsgBox "Eintrag für """ & arrWoTage(intWT, 3) _
& """ ist bereits vorhanden in Zeile " & lngDS
Else
'nächste freie Zeile ermitteln
Leerzeile = .Cells(.Rows.Count, 1).End(xlUp).Row
If Leerzeile