Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1492to1496
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Auslesen Textbox

Auslesen Textbox
10.05.2016 22:17:07
Michael
Hallo liebe Vba Experten, vielleicht könnt ihr mir ja doch mal wieder helfen.
Ich Lese Textboxen mit folgendem Code unten aus und habe dann das Problem, wenn die Textboxen mit den Datum leer bleiben ich eine Fehlermeldung "Typen unverträglich" bekomme. Das heisst es muss ein Datum drinstehen. Wie kann ich den Befehl If txt2BefristungW, txt1BefristungW und txtEintrittW.TextLength 0 Then oder auch anderen unterbringen?
Vielen Dank im Vorraus
Gruss Michael
Sub cmdÄnderungenSpeicherW_Click()
Dim lZeile As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet (Übernommen)
If ListW.ListIndex = -1 Then Exit Sub
'Wir müssen prüfen, ob die Namen Spalte auch gefüllt ist!!
If Trim(CStr(txtNameW.Text)) = "" Then
'Meldung ausgeben
MsgBox "Du musst mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
'Abbrechen der Speicherroutine
Exit Sub
End If
If MsgBox("Möchtest du die Änderungen wirklich übernehmen?", vbYesNo) = vbNo Then
Unload Me
FormularLeihWerks.Show
End If
'Ausbauoption: Prüfen, ob der Name in Tabelle7 Spalte 1 schon vorhanden ist!
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 3 'Start in Zeile 3, Zeile 1 und 2 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle7.Cells(lZeile, 1).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListW.Text = Trim(CStr(Tabelle7.Cells(lZeile, 1).Value)) Then
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Tabelle7.Cells(lZeile, 1).Value = Trim(CStr(txtNameW.Text))
Tabelle7.Cells(lZeile, 2).Value = txtVornameW.Text
Tabelle7.Cells(lZeile, 15).Value = txtVertragsartW.Text
Tabelle7.Cells(lZeile, 3).Value = txtAbteilungW.Text
Tabelle7.Cells(lZeile, 5).Value = CDate(txtEintrittW.Value)
Tabelle7.Cells(lZeile, 16).Value = txtEntlohnungW.Value
Tabelle7.Cells(lZeile, 7).Value = CDate(txt1BefristungW.Value)
Tabelle7.Cells(lZeile, 8).Value = CDate(txt2BefristungW.Value)
Tabelle7.Cells(lZeile, 18).Value = txtKstW.Value
'Die ListBox muss nun neu geladen werden
'allerdings nur, wenn sich der Name geändert hat
If ListW.Text  Trim(CStr(txtNameW.Text)) Then
Call UserForm_Initialize
If ListW.ListCount > 0 Then ListW.ListIndex = 0
End If
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
Unload Me
FormularLeihWerks.Show
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auslesen Textbox
11.05.2016 07:43:44
Nepumuk
Hallo,
so:
If IsDate(txtEintrittW.Value) Then Tabelle7.Cells(lZeile, 5).Value = CDate(txtEintrittW.Value)

Gruß
Nepumuk

AW: Auslesen Textbox
11.05.2016 17:12:45
Michael
Hallo Nepumuk,
danke erstmal für deine Antwort
habe es so wie unten versucht, die Änderungen werden aber nicht übernommen.
Wo muss der Befehl denn hin?
Gruß Michael

Sub cmdÄnderungenSpeicherW_Click()
Dim lZeile As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet (Übernommen)
If ListW.ListIndex = -1 Then Exit Sub
'Wir müssen prüfen, ob die Namen Spalte auch gefüllt ist!!
If Trim(CStr(txtNameW.Text)) = "" Then
'Meldung ausgeben
MsgBox "Du musst mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
'Abbrechen der Speicherroutine
Exit Sub
End If
If MsgBox("Möchtest du die Änderungen wirklich übernehmen?", vbYesNo) = vbNo Then
Unload Me
FormularLeihWerks.Show
End If
'Ausbauoption: Prüfen, ob der Name in Tabelle7 Spalte 1 schon vorhanden ist!
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 3 'Start in Zeile 3, Zeile 1 und 2 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle7.Cells(lZeile, 1).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListW.Text = Trim(CStr(Tabelle7.Cells(lZeile, 1).Value)) Then
If IsDate(txt2BefristungW.Value) Then Tabelle7.Cells(lZeile, 8).Value = CDate( _
txt2BefristungW.Value)
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Tabelle7.Cells(lZeile, 1).Value = Trim(CStr(txtNameW.Text))
Tabelle7.Cells(lZeile, 2).Value = txtVornameW.Text
Tabelle7.Cells(lZeile, 15).Value = txtVertragsartW.Text
Tabelle7.Cells(lZeile, 3).Value = txtAbteilungW.Text
Tabelle7.Cells(lZeile, 5).Value = CDate(txtEintrittW.Value)
Tabelle7.Cells(lZeile, 16).Value = txtEntlohnungW.Value
Tabelle7.Cells(lZeile, 7).Value = CDate(txt1BefristungW.Value)
'Tabelle7.Cells(lZeile, 8).Value = CDate(txt2BefristungW.Value)
Tabelle7.Cells(lZeile, 18).Value = txtKstW.Value
'Die ListBox muss nun neu geladen werden
'allerdings nur, wenn sich der Name geändert hat
If ListW.Text  Trim(CStr(txtNameW.Text)) Then
Call UserForm_Initialize
If ListW.ListCount > 0 Then ListW.ListIndex = 0
End If
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
Unload Me
FormularLeihWerks.Show
End Sub

Anzeige
AW: Auslesen Textbox
11.05.2016 17:15:12
Nepumuk
Hallo,
1. Hast du die alten Zeilen noch im Code.
2. Solltest du das für jede Datums-TextBox machen.
Gruß
Nepumuk

AW: Auslesen Textbox
11.05.2016 19:22:36
Michael
Hallo Nepmuk,
habe mal eine datei hochgeladen. Wenn du Lust hast schau dir doch Bitte mal in dem Formular LeihWerks (Änderungen Werksstudenten übernehmen) meine Änderungen an.
https://www.herber.de/bbs/user/105515.xlsm
Nicht wundern, die Datei ist schon älter, aber für solche zwecke noch gut :-)
cu

AW: Auslesen Textbox
12.05.2016 09:06:13
Nepumuk
Hallo,
so war das gemeint:
Sub cmdÄnderungenSpeicherW_Click()
    Dim lZeile As Long
    
    'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet (Übernommen)
    If ListW.ListIndex = -1 Then Exit Sub
    
    'Wir müssen prüfen, ob die Namen Spalte auch gefüllt ist!!
    If Trim(CStr(txtNameW.Text)) = "" Then
        'Meldung ausgeben
        MsgBox "Du musst mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
        'Abbrechen der Speicherroutine
        Exit Sub
    End If
    If MsgBox("Möchtest du die Änderungen wirklich übernehmen?", vbYesNo) = vbNo Then
        Unload Me
        FormularLeihWerks.Show
    End If
    'Ausbauoption: Prüfen, ob der Name in Tabelle7 Spalte 1 schon vorhanden ist!
    
    'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
    lZeile = 3 'Start in Zeile 3, Zeile 1 und 2 sind ja die Überschriften
    'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle7.Cells(lZeile, 1).Value)) <> ""
        
        'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
        If ListW.Text = Trim(CStr(Tabelle7.Cells(lZeile, 1).Value)) Then
            
            'Eintrag gefunden, TextBoxen in die Zellen schreiben
            Tabelle7.Cells(lZeile, 1).Value = Trim(CStr(txtNameW.Text))
            Tabelle7.Cells(lZeile, 2).Value = txtVornameW.Text
            Tabelle7.Cells(lZeile, 15).Value = txtVertragsartW.Text
            Tabelle7.Cells(lZeile, 3).Value = txtAbteilungW.Text
            If IsDate(txtEintrittW.Value) Then Tabelle7.Cells(lZeile, 5).Value = CDate(txtEintrittW.Value)
            Tabelle7.Cells(lZeile, 16).Value = txtEntlohnungW.Value
            If IsDate(txt1BefristungW.Value) Then Tabelle7.Cells(lZeile, 7).Value = CDate(txt1BefristungW.Value)
            If IsDate(txt2BefristungW.Value) Then Tabelle7.Cells(lZeile, 8).Value = CDate(txt2BefristungW.Value)
            Tabelle7.Cells(lZeile, 18).Value = txtKstW.Value
            
            'Die ListBox muss nun neu geladen werden
            'allerdings nur, wenn sich der Name geändert hat
            If ListW.Text <> Trim(CStr(txtNameW.Text)) Then
                Call UserForm_Initialize
                If ListW.ListCount > 0 Then ListW.ListIndex = 0
            End If
            
            Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
            
        End If
        
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    Loop
    Unload Me
    FormularLeihWerks.Show
    
End Sub

Gruß
Nepumuk

Anzeige
AW: Auslesen Textbox
13.05.2016 22:34:35
Michael
Hallo Nepumuk,
genau so habe ich es gemacht...
Die Änderungen werden aber nicht übernommen.
Ich verzweifele hier.
Was ist falsch im Code?
Alles Gegoogle hat nichts ergeben.
Werde es weiter probieren und wenn ich die Lösung finden sollte, werde ich sie hier einstellen.
Vielen Dank für deine Hilfe
Gruß Michael

AW: Auslesen Textbox
13.05.2016 22:47:52
Michael
So, nach langen suchen im Netz habe ich die Lösung!
In die Userform den Code unten eingeben und alle Datumsformat Probleme sind gelöst!
Vielen dank an den Autor dieses Beitrages.
Gruß Michael
Datumseingabe in Access und VBA in Access
Verfasst von Gast am 24. September 2015 - 18:48.
In dem Wortlaut steht das VBA immer die US Schreibweise verwendet
Irrtum
Datefelder können in der Form 11-12-2015 eingegeben werden
Das Problem jedoch, das bei Eingabe von 12.14.2015 in ein Feld vom Format Date in Access er daraus 14.12.macht
Die Tag Monat und Jahr Abfrage liefert bei 11.12.2015 ein 11,12,2015
Die Tag Monat und Jahr Abfrage liefert bei 12.14.2015 ein 14,12,2015
Auch der isdate arbeitet inkorrekt und das ganze lässt sich durch eine Funktion die vor die Feldaktualisierung eingebracht wird nicht abfangen.
Es hilft nur eine Verwendung eines Eingabefeldes vom Typ String dessen Wert man zuerst per VBA auf Gültigkeit prüft und danach diesen String in das Datumsfeld des Datensatzes einbringt.
Dies geht in Access ja durch das unsichtbar machen des Datensatzfeldes und das sichtbar machen des Eingabefeldes. Dabei auf Aktivierung und Sperung achten.
Bsp. Stellen zwischen 1.tem und 2.ten Punkt auf Gültigkeit 1-12 testen.
Ich habe eine Function geschrieben die gleichzeitig die Eingaben im Format 1.1.2015, 1-12-2015 oder 2/4/2015 erlaubt
Private Function Datumtest(ByVal Datumstring As String) As Boolean
Dim Zaehler As Integer
Dim Pospunkt(1) As Integer
Dim Posstrich(1) As Integer
Dim Posbindestrich(1) As Integer
Zaehler = 0
If Len(Datumstring) > 10 Or Len(Datumstring)  1 And Posbindestrich(0) = 0 Then
Posbindestrich(0) = Zaehler
ElseIf Zaehler > 3 And Posbindestrich(1) = 0 Then
Posbindestrich(1) = Zaehler
Else
'Fehler da mehr als 2 Striche
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d-mm-yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
End If
Case 46 'Punkt
If Zaehler > 1 And Pospunkt(0) = 0 Then
Pospunkt(0) = Zaehler
ElseIf Zaehler > 3 And Pospunkt(1) = 0 Then
Pospunkt(1) = Zaehler
Else
'Fehler da mehr als 2 Punkte
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d-mm-yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
End If
Case 47 '/ Strich
If Zaehler > 1 And Posstrich(0) = 0 Then
Posstrich(0) = Zaehler
ElseIf Zaehler > 3 And Posstrich(1) = 0 Then
Posstrich(1) = Zaehler
Else
'Fehler da mehr als 2 Schrägstriche
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d-mm-yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
End If
Case 48 To 57
'Zahl zwischen 0 und 9
Case Else 'Kein korrektes Zeichen
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d/m/yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
End Select
Loop While Zaehler  0 Then
If Pospunkt(0)  0 Or Posstrich(0)  0 Or Posbindestrich(1) = 0 Or Posbindestrich(0) + 1 =  _
Posbindestrich(1) Then
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d/m/yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
Else
'Check ob Monatszahl >12
If Val(Mid$(Datumstring, Posbindestrich(0) + 1, Posbindestrich(1) - Posbindestrich(0) - 1)) >  _
12 Then
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d/m/yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
End If
End If
End If
If Pospunkt(0)  0 Then
If Posbindestrich(0)  0 Or Posstrich(0)  0 Or Pospunkt(1) = 0 Or Pospunkt(0) + 1 = Pospunkt( _
1) Then
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d/m/yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
Else
'Check ob Monatszahl >12
If Val(Mid$(Datumstring, Pospunkt(0) + 1, Pospunkt(1) - Pospunkt(0) - 1)) > 12 Then
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d/m/yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
End If
End If
End If
If Posstrich(0)  0 Then
If Posbindestrich(0)  0 Or Pospunkt(0)  0 Or Posstrich(1) = 0 Or Posstrich(0) + 1 =  _
Posstrich(1) Then
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d/m/yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
Else
'Check ob Monatszahl >12
If Val(Mid$(Datumstring, Posstrich(0) + 1, Posstrich(1) - Posstrich(0) - 1)) > 12 Then
MsgBox "Datum inkorrekt. Eingabe wie dd/mm/yyyy oder d/m/yy oder d.mm.yyyy erforderlich !"
Datumtest = False
Exit Function
End If
End If
End If
If IsDate(Datumstring) Then
'Fehler wenn Datumeingabe z.B 12.14.2015, dies da er im Datumsfeld Tag und Monat wechselt
'Fehler auch bei month(12.15.2015), Access zeigt 12
'Darum vorab Check ob Monat >12
Datumtest = True
Else
Datumtest = False
End If
End Function
Bye
Mike

Anzeige
AW: Auslesen Textbox
13.05.2016 23:06:44
Michael
Sorry, war zu voreilig, klappt immer noch nicht....
Mist...
Bekomme jetzt den Fehler 2036 in der textbox angezeigt.
Ich drehe hier noch durch.

AW: Auslesen Textbox
15.05.2016 20:21:10
Michael
Hallo zusammen, jetzt wirklich die Lösung des Problems!
Dank Nepumuk bin ich dann drauf gekommen.
Anstatt die If Variante habe ich die Case Variante gewählt und das dann mit Erfolg.
Vielen Dank an Nepumuk

Sub cmdÄnderungenSpeicherW_Click()
Dim lZeile As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet (Übernommen)
If ListW.ListIndex = -1 Then Exit Sub
'Wir müssen prüfen, ob die Namen Spalte auch gefüllt ist!!
If Trim(CStr(txtNameW.Text)) = "" Then
'Meldung ausgeben
MsgBox "Du musst mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
'Abbrechen der Speicherroutine
Exit Sub
End If
If MsgBox("Möchtest du die Änderungen wirklich übernehmen?", vbYesNo) = vbNo Then
Unload Me
FormularLeihWerks.Show
End If
'Ausbauoption: Prüfen, ob der Name in Tabelle7 Spalte 1 schon vorhanden ist!
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 3 'Start in Zeile 3, Zeile 1 und 2 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle7.Cells(lZeile, 1).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListW.Text = Trim(CStr(Tabelle7.Cells(lZeile, 1).Value)) Then
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Tabelle7.Cells(lZeile, 1).Value = Trim(CStr(txtNameW.Text))
Tabelle7.Cells(lZeile, 2).Value = txtVornameW.Text
Tabelle7.Cells(lZeile, 15).Value = txtVertragsartW.Text
Tabelle7.Cells(lZeile, 3).Value = txtAbteilungW.Text
Tabelle7.Cells(lZeile, 16).Value = txtEntlohnungW.Value
Tabelle7.Cells(lZeile, 18).Value = txtKstW.Value
Select Case txtEintrittW
Case (txtEintrittW.Value): Tabelle7.Cells(lZeile, 5).Value = (txtEintrittW.Value)
Case (txtEintrittW.Value), "": Tabelle7.Cells(lZeile, 5).Value = ""
End Select
Select Case txt1BefristungW
Case IsDate(txt1BefristungW.Value): Tabelle7.Cells(lZeile, 7).Value = CDate( _
txt1BefristungW.Value)
Case (txt1BefristungW.Value), "": Tabelle7.Cells(lZeile, 7).Value = ""
End Select
Select Case txt2BefristungW
Case IsDate(txt2BefristungW.Value): Tabelle7.Cells(lZeile, 8).Value = CDate( _
txt2BefristungW.Value)
Case (txt2BefristungW.Value), "": Tabelle7.Cells(lZeile, 8).Value = ""
End Select
'Die ListBox muss nun neu geladen werden
'allerdings nur, wenn sich der Name geändert hat
If ListW.Text  Trim(CStr(txtNameW.Text)) Then
Call UserForm_Initialize
If ListW.ListCount > 0 Then ListW.ListIndex = 0
End If
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
Unload Me
FormularLeihWerks.Show
End Sub

Anzeige
wenn gelöst - warum offen? owT
16.05.2016 08:57:58
MB12
.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige