VBA Code auch auf leeres Feld reagieren

josef24

Erfahrenes Mitglied
Guten Tag zusammen.
Ich habe eine Eingabemaske worüber ich Daten eingebe, und auch Inhalte löschen kann. Bei normalen Textzellen geht da problemlos. Wenn ich nun Inhalt in einem "Datumsfeld" löschen will, funktioniert das nicht. Die dann leere Zelle wird nicht als solche erkannt, bzw. ein leeres Datenfeld wird nicht erkannt. Die Ergänzung auch ein leeres Datenfeld zu erkennen und die Tabelle mit dem "Inhalt" leeres Datenfeld zu löschen funktioniert mit meinem Code nicht. Kann mir hier vielleicht jemand weiter helfen? Gruß Josef

Mein Codetext:
Visual Basic:
Private Sub cmdSave_Click() ' Daten übertragen , Datei – Speichern [aktive Arbeitsmappe]
Dim lZeile As Long
Dim rngRow As Range
    If lstData.ListIndex = -1 Then Exit Sub
    If Trim(CStr(txtPosNr.Text)) = "" Then
    MsgBox "Sie müssen mindestens eine Nummer eingeben!", vbCritical + vbOKOnly, "FEHLER!"
    Exit Sub
    End If
'Zeile suchen und auslesen
If seekArb(txtPosNr, rngRow) Then 'Werte übernehmen
    rngRow.Cells(, colAtPosNr).Value = Trim(CStr(txtPosNr.Text))
    rngRow.Cells(, colAtNummer).Value = txtnummer.Text
    rngRow.Cells(, colAtAnrede).Value = ComboBox1.Text
    rngRow.Cells(, colAtNachname).Value = txtNachname.Text
    rngRow.Cells(, colAtVorname).Value = txtVorname.Text
    rngRow.Cells(, colAtStrasse).Value = txtStrasse.Text
    rngRow.Cells(, colAtWohnort).Value = txtWohnort.Text
    rngRow.Cells(, colAtTelefon).Value = txtTelefon.Text
         If IsDate(txtGeburtstag.Text) Then rngRow.Cells(, colAtGeburtstag).Value = CDate(txtGeburtstag.Text) 'Datumsfeld mit Format
         If IsDate(txtEintritt.Text) Then rngRow.Cells(, colAtEintritt).Value = CDate(txtEintritt.Text) 'Datumsfeld mit Format
         If IsDate(txtAustritt.Text) Then rngRow.Cells(, colAtAustritt).Value = CDate(txtAustritt.Text) 'Datumsfeld mit Format
         If IsDate(txtgenBis.Text) Then rngRow.Cells(, colAtgenBis).Value = CDate(txtgenBis.Text) 'Datumsfeld mit Format
    rngRow.Cells(, colAtGruppe).Value = txtgruppe.Text
    rngRow.Cells(, colAtKrankenkasse).Value = txtkrankenkasse.Text
    rngRow.Cells(, colAtKrKNr).Value = txtKrKNr.Text
    rngRow.Cells(, colAtBemerkung).Value = TxTBemerkung.Text
    rngRow.Cells(, colAtZahlung).Value = TxTZahlung.Text
'User Formular neu laden
    lZeile = Me.lstData.ListIndex 'Listindex merken
    Call UserForm_Initialize
    Me.lstData.ListIndex = lZeile 'wiederherstellen
        Else
    MsgBox "Nummer " & txtPosNr.Text & " nicht gefunden", vbExclamation + vbOKOnly
    End If
Call cmdNew_Click
End Sub
 
Zuletzt bearbeitet von einem Moderator:
??
Aircode!
Code:
If txtGeburtstag.Text="" Then rngRow.Cells(, colAtGeburtstag).Value="" ElseIf IsDate...bblablabla
 
Danke erstmal für deine Unterstützung. Habe den Code wie ich es verstehe, mal komplettiert. Er bringt bei ElseIf "Erwarte Anweisungsende". Hier mal mein Versuch:
If txtGeburtstag.Text="" Then rngRow.Cells(, colAtGeburtstag).Value="" ElseIf = _ IsDate (txtGeburtstag.Text) Then rngRow.Cells(, colAtGeburtstag)' .Value = CDate(txtGeburtstag.Text)' ...bblablabla

Gruß Josef
 
Stimmt. Auf alle Fälle ein Chaos.
Es hat auch nicht ein Sinnloses ' drin. Wenn man alles danach als Kommentar hat, bleibt nur das folgende übrig und das ist für die Katz. .. Then rngRow.Cells(, colAtGeburtstag)
If-Then-Elsif eignen sich nicht für Einzeiler

Wenn Einzeiler, dann besser IIF
Visual Basic:
rngRow.Cells(, colAtGeburtstag).Value = iif(IsDate(txtGeburtstag.Text), CDate(txtGeburtstag.Text), txtGeburtstag.Text)
 
Danke an die Spezialisten. Aber ginge vielleicht eine komplette Zeile? Denn bei soviel Korrekturinhalt finde ich mich nicht mehr zurecht. Gruß Josef
 
Sorry, aber leider funktioniert das so nicht???? Er markiert die komplette Zeile in Gelb und kollidiert mit anderen Codes, offensichtlich eine Unverträglichkeit? Gruß Josef
 
Zurück