Guten morgen, ich bin absoluter Anfänger in VBA und komme nicht weiter. Ich probiere in meinem VBA vieles zu Kommentieren was ich mache oder besser möchte. Ich habe folgendes Problem. Ich möchte folgendes wir haben zb. vier Schichten also Schicht A, B, C, D diese trage ich mit der Combobox ein. Jeden Tag macht jede Schicht eine Eingabe. Also gibt es den Eintrag 08.02.2023 / A,B,C,D. Im Code möchte ich überprüfen ob das schon in der Tabelle steht und wenn ja soll eine Fehlermeldung aufgehen.
Im Moment kann ich die Daten so oft eingeben wie ich möchte. Obwohl ich das doch überprüfe. Wenn mir eine helfen könnte wäre super bitte mit erklärung was ich falsch mache, möchte ja lernen.
Private Sub cmd_OK_Click()
'Variablen deklarieren
Dim ws As Worksheet
Dim tbl As ListObject
Dim lastRow As Long
Dim i As Long
Dim found As Boolean
'Tabellenblatt und Liste auswählen
Set ws = ThisWorkbook.Sheets("Datenbank")
Set tbl = ws.ListObjects("tbl_Datenbank")
'Combobox prüfen, ob ausgefüllt
If cbx_S.Value = "" Then
MsgBox "Bitte füllen Sie die Combobox aus!", vbExclamation
cbx_S.SetFocus
Exit Sub
End If
'Überprüfen, ob das Datum gültig ist
If Not IsDate(txt_Datum.Value) Then
MsgBox "Bitte geben Sie ein gültiges Datum ein!", vbExclamation
txt_Datum.SetFocus
Exit Sub
End If
'Prüfen, ob bereits ein identischer Datensatz vorhanden ist
found = False
For i = 1 To tbl.ListRows.Count
If tbl.ListRows(i).Range(1, 3).Value = cbx_S.Value And tbl.ListRows(i).Range(1, 1).Value = txt_Datum.Value Then
found = True
If MsgBox("Der Datensatz ist bereits vorhanden. Möchten Sie die Daten aktualisieren?", vbYesNo + vbQuestion) = vbYes Then
tbl.Range(lastRow, 1).Value = txt_Datum.Value
tbl.Range(lastRow, 2).Value = txt_Tag.Value
tbl.Range(lastRow, 3).Value = cbx_S.Value
tbl.Range(lastRow, 4).Value = txt_ST_h.Value
tbl.Range(lastRow, 5).Value = txt_Menge.Value
tbl.Range(lastRow, 6).Value = txt_Plan.Value
tbl.Range(lastRow, 7).Value = txt_Forcecast.Value
tbl.Range(lastRow, 8).Value = txt_Bänder.Value
tbl.Range(lastRow, 9).Value = txt_Nutzgrad.Value
tbl.Range(lastRow, 10).Value = txt_Prod_Stö.Value
tbl.Range(lastRow, 11).Value = txt_AT_Stö.Value
tbl.Range(lastRow, 12).Value = txt_Pause.Value
tbl.Range(lastRow, 13).Value = txt_Probe.Value
tbl.Range(lastRow, 14).Value = txt_AWW.Value
'... weitere Textboxen ...
Exit Sub
Else
Exit Sub
End If
End If
Next i
'Wenn kein identischer Datensatz vorhanden, dann in nächste freie Zeile einfügen
If Not found Then
lastRow = tbl.Range.Rows.Count + 1
tbl.ListRows.Add
tbl.Range(lastRow, 1).Value = txt_Datum.Value
tbl.Range(lastRow, 2).Value = txt_Tag.Value
tbl.Range(lastRow, 3).Value = cbx_S.Value
tbl.Range(lastRow, 4).Value = txt_ST_h.Value
tbl.Range(lastRow, 5).Value = txt_Menge.Value
tbl.Range(lastRow, 6).Value = txt_Plan.Value
tbl.Range(lastRow, 7).Value = txt_Forcecast.Value
tbl.Range(lastRow, 8).Value = txt_Bänder.Value
tbl.Range(lastRow, 9).Value = txt_Nutzgrad.Value
tbl.Range(lastRow, 10).Value = txt_Prod_Stö.Value
tbl.Range(lastRow, 11).Value = txt_AT_Stö.Value
tbl.Range(lastRow, 12).Value = txt_Pause.Value
tbl.Range(lastRow, 13).Value = txt_Probe.Value
tbl.Range(lastRow, 14).Value = txt_AWW.Value
'... weitere Textboxen ...
End If
'Userform schließen
Unload Me
End Sub
|