Datum umwandeln

Bitte deine aktuelle Umsetzung anzeigen
Und welche Daten übernimmt er nicht? Alle oder nur die 3te Datumszeile?
 
Hallo und Danke, er übernimmt alle Daten (den komplett eingegebenen Datensatz) nicht. s. Anlage. Hatte noch mit "End If" versucht???? Gruß Josef

Code:
     Do While Trim(CStr(Tabelle4.Cells(lZeile, 1).Value)) <> ""
         If ListBox1.Text = Trim(CStr(Tabelle4.Cells(lZeile, 1).Value)) Then
             Tabelle4.Cells(lZeile, 1).Value = Trim(CStr(TextBox1.Text))
             Tabelle4.Cells(lZeile, 2).Value = TextBox2.Text
             Tabelle4.Cells(lZeile, 3).Value = TextBox3.Text
             Tabelle4.Cells(lZeile, 4).Value = TextBox4.Text
             Tabelle4.Cells(lZeile, 5).Value = TextBox5.Text
             Tabelle4.Cells(lZeile, 7).Value = TextBox6.Text
             Tabelle4.Cells(lZeile, 8).Value = TextBox7.Text
        If IsDate(TextBox8.Text) Then Tabelle4.Cells(lZeile, 9).Value = CDate(TextBox8.Text)   'Datumsfeld mit Format
        If IsDate(TextBox9.Text) Then Tabelle4.Cells(lZeile, 10).Value = CDate(TextBox9.Text)   'Datumsfeld mit Format
        If IsDate(TextBox10.Text) Then Tabelle4.Cells(lZeile, 11).Value = CDate(TextBox10.Text)   'Datumsfeld mit Format
        If IsDate(TextBox11.Text) Then Tabelle4.Cells(lZeile, 12).Value = CDate(TextBox11.Text)   'Datumsfeld mit Format
             Tabelle4.Cells(lZeile, 13).Value = TextBox12.Text
             Tabelle4.Cells(lZeile, 18).Value = TextBox13.Text
             Tabelle4.Cells(lZeile, 19).Value = TextBox14.Text
             If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then
             End If
             End If
             End If
             End If
                 Call UserForm_Initialize
                 If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
             End If
             Exit Do
         End If
         lZeile = lZeile + 1
     Loop
End Sub
 
Der sollte eh einen Kompilierfehler geben.
Zu viele End If

Es gibt 2 Möglichkeiten um If ohne else Anzuwenden
Visual Basic:
IF bedinung THEN
   mache
END IF
'oder als Einzeiler
IF bedinung THEN mache

Zudem, formatiere deinen Code sauber, damit du auch siehst wo ein IF beginnt und wo er endet
Dein folgender Codeabschnitt kannst du so nämlich gleich spülen. Der macht gar nix.
Visual Basic:
             If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then
             End If
 
Vielen Dank für deine Erklärung. Ich muß gestehen das ich wahrscheinlich jetzt das Problem des richtigen Einordnens habe. Geht es bitte etwas ausführlicher?
Wo z.B. platziere ich "If Bedingung Then" , und was muss ich anstelle "Bedingung" hernehmen? Geht da bitte noch etwas Unterstützung, es wäre mir damit sehr geholfen. Danke nochmal und Gruß Josef

Code:
             Tabelle4.Cells(lZeile, 18).Value = TextBox13.Text
             Tabelle4.Cells(lZeile, 19).Value = TextBox14.Text
            '       If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then
             If ListBox1. Then
             End If
                 Call UserForm_Initialize
                 If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
 
Ich kann dir nicht wirklich helfen, weil:
1) ich keine Ahnung habe, was dein Cod genau soll
2) deine Feldbeschreibungen für das Verständnis deines Problemes absolut NICHT hilfreich sind
3) du hier immer wieder VBA-Codeschnipsel postest bei denen sogar Excel motzen sollte, dass die Syntax nix taugt

Als. Was soll der Blödsinn mit der Listbox1. ? Der Code, den ich zitiert hatte macht keinen Sinn weil: "Wenn XY Dann mach nix". Das beeutet aber auch, wenn NICHT XY, macht er auch nix. Also sind es einfach sinnlose Code-Zeilen die einzig dazu da sind dein Code zu verlangsamen und unleserlicher zu machen.

Mach dich mal mit dem If vertraut!
 
Entschuldigung für mein Miniwissen. Es war von mir lediglich ein Versuch deinen Vorschlag bei mir einzuarbeiten. Es würde mir natürlich weiter helfen, wenn du noch bereit wärest, das Einordnen des Code an der richtigen Stelle zu erklären (Beispiel)?. Habe mal mein Problem komplett hier eingepflegt. Danke bis dahin. Vielleicht kann ich ja nochmal deine Hilfe beanspruchen? Gruß Josef

Code:
  Private Sub CommandButton3_Click()  ' Daten übertragen , Datei – Speichern [aktive Arbeitsmappe]
   Dim lZeile As Long
     If ListBox1.ListIndex = -1 Then Exit Sub
      If Trim(CStr(TextBox1.Text)) = "" Then
         MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
Exit Sub
     End If
     lZeile = 2
     Do While Trim(CStr(Tabelle4.Cells(lZeile, 1).Value)) <> ""
         If ListBox1.Text = Trim(CStr(Tabelle4.Cells(lZeile, 1).Value)) Then
             Tabelle4.Cells(lZeile, 1).Value = Trim(CStr(TextBox1.Text))
             Tabelle4.Cells(lZeile, 2).Value = TextBox2.Text
             Tabelle4.Cells(lZeile, 3).Value = TextBox3.Text
             Tabelle4.Cells(lZeile, 4).Value = TextBox4.Text
             Tabelle4.Cells(lZeile, 5).Value = TextBox5.Text
             Tabelle4.Cells(lZeile, 7).Value = TextBox6.Text
             Tabelle4.Cells(lZeile, 8).Value = TextBox7.Text
        If IsDate(TextBox8.Text) Then Tabelle4.Cells(lZeile, 9).Value = CDate(TextBox8.Text)   'Datumsfeld mit Format
        If IsDate(TextBox9.Text) Then Tabelle4.Cells(lZeile, 10).Value = CDate(TextBox9.Text)   'Datumsfeld mit Format
        If IsDate(TextBox10.Text) Then Tabelle4.Cells(lZeile, 11).Value = CDate(TextBox10.Text)   'Datumsfeld mit Format
        If IsDate(TextBox11.Text) Then Tabelle4.Cells(lZeile, 12).Value = CDate(TextBox11.Text)   'Datumsfeld mit Format
             Tabelle4.Cells(lZeile, 13).Value = TextBox12.Text
             Tabelle4.Cells(lZeile, 18).Value = TextBox13.Text
             Tabelle4.Cells(lZeile, 19).Value = TextBox14.Text
            '       If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then
               If ????? Then
             End If
          
                 Call UserForm_Initialize
                 If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
             Exit Do
         End If
         lZeile = lZeile + 1
     Loop
End Sub
 
Nochmals:
1) Sauber formatieren ist das halbe Programmieren. So sieht man auch auf anhieb, wo ein Block beginnt und wo er endet.
2) Den Code durch Excel VBA Kompilieren und somit auf grobe Schnitzer (nicht geschlossene IF etc.) testen. Solange dieser Test misslingt, musst du gar nix laufen lassen, weil es eh nicht funktioniert
3) Die Felder so benennen, dass man weiss was es ist.

Ich habe mal dein Code folgendermassen angepasst. Ev. macht er mehr oder weniger was du willst.
Visual Basic:
Private Sub CommandButton3_Click()  ' Daten übertragen , Datei – Speichern [aktive Arbeitsmappe]
    Dim lZeile As Long

    If ListBox1.ListIndex = -1 Then Exit Sub
   
    If Trim(CStr(TextBox1.Text)) = "" Then
        MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
        Exit Sub
    End If
   
    lZeile = 2
    Do While Trim(CStr(Tabelle4.Cells(lZeile, 1).Value)) <> ""
        If ListBox1.Text = Trim(CStr(Tabelle4.Cells(lZeile, 1).Value)) Then
            Tabelle4.Cells(lZeile, 1).Value = Trim(CStr(TextBox1.Text))
            Tabelle4.Cells(lZeile, 2).Value = TextBox2.Text
            Tabelle4.Cells(lZeile, 3).Value = TextBox3.Text
            Tabelle4.Cells(lZeile, 4).Value = TextBox4.Text
            Tabelle4.Cells(lZeile, 5).Value = TextBox5.Text
            Tabelle4.Cells(lZeile, 7).Value = TextBox6.Text
            Tabelle4.Cells(lZeile, 8).Value = TextBox7.Text
            If IsDate(TextBox8.Text) Then Tabelle4.Cells(lZeile, 9).Value = CDate(TextBox8.Text)   'Datumsfeld mit Format
            If IsDate(TextBox9.Text) Then Tabelle4.Cells(lZeile, 10).Value = CDate(TextBox9.Text)   'Datumsfeld mit Format
            If IsDate(TextBox10.Text) Then Tabelle4.Cells(lZeile, 11).Value = CDate(TextBox10.Text)   'Datumsfeld mit Format
            If IsDate(TextBox11.Text) Then Tabelle4.Cells(lZeile, 12).Value = CDate(TextBox11.Text)   'Datumsfeld mit Format
            Tabelle4.Cells(lZeile, 13).Value = TextBox12.Text
            Tabelle4.Cells(lZeile, 18).Value = TextBox13.Text
            Tabelle4.Cells(lZeile, 19).Value = TextBox14.Text
            '       If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then
            'Yaslaw: Keine Ahnung was du da machen willst. Habe darum sie folgenden Zeilen auskommentiert
            'If ????? Then
        End If

        Call UserForm_Initialize
        If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
        'Yaslaw: Was willst du mit den folgenden 2 Zeilen? Die ergeben keinen Sinn
        'Exit Do
        'End If
        lZeile = lZeile + 1
    Loop
End Sub
 
Danke für die Mühe die du mit mir hast, und den Einsatz von deiner Seite. Habe deinen Code eingebracht. Leider übernimmt er aber neue Daten nicht in die Tabelle.
Keine Fehlermeldung, keine Textübername. Wärst du bereit hier nochmal einen Blick drauf zu werfen? Vielen Dank jetzt schon, Gruß Josef
 
Lade mal was hoch wo man vielleicht aktiv am Beispiel was erkennen kann. Gruß Josef
 

Anhänge

  • 4te TESTTABELLE 07_2017.zip
    264,8 KB · Aufrufe: 2
Dein Code initialisiert das Formular im falschen Moment.
Ich habe dir mal eine Anpassung gemacht. Zudem habe ich dir einige Felder umbenennt. Mit Feldernamen Text 1 bis TextX weigere ich mich zu abreiten!

Neben dem umbennen der Textfelder habe ich auch nochein Enum eingefügt, der die Spalten definiert
Visual Basic:
'/**
' * Enum mit den Feldnummern der Tabelle ArbTab (At)
' */
Private Enum eColAtFields
    colAtNummer = 1
    colAtAnrede = 2
    colAtNachname = 3
    colAtVorname = 4
    colAtStrasse = 5
    colAtWohnort = 7
    colAtTelefon = 8
    colAtGeburtstag = 9
    '//TODO: analog weiterführen
End Enum

Weiter habe ich deine Do...Loop Entfernt. Die Funktion seekAt() sucht jetzt die passende Zeile und gibt diese als Range zurück
Visual Basic:
'/**
' * Sucht in der Tabelle4 ArbTab nach einer Nummer
' * @param  String      (IN) Gesuchte Nummer
' * @param  Range       (OUT) Gefundener Range
' * @return Long        Die Zeilennummer. 0 bedeutet nicht gefunden
' */
Private Function seekArb(ByVal iId As String, Optional ByRef oRange As Range) As Long
    Dim rowNr As Long
On Error GoTo Err_Handler

    seekArb = wsAt.Range("A:A").Find(iId, , , , , , , True).Row
    Set oRange = wsAt.Rows(seekArb)
    Exit Function

Err_Handler:
    seekArb = 0
End Function

Damit lässt es sich jetzt relativ leicht arbeiten. Es ist auch übersichtlicher
Visual Basic:
    'Zeile suchen und auslesen
    If seekArb(txtNummer, rngRow) Then
        'Werte übernehmen
        rngRow.Cells(, colAtNummer).Value = Trim(CStr(txtNummer.Text))
        rngRow.Cells(, colAtAnrede).Value = txtAnrede.Text
        rngRow.Cells(, colAtNachname).Value = txtNachname.Text
        rngRow.Cells(, colAtVorname).Value = txtVorname.Text
        ...
 

Anhänge

  • 4te TESTTABELLE 07_2017Yaslaw.zip
    274,1 KB · Aufrufe: 2
Zurück