Userform - Datumseingabe

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Userform - Datumseingabe
von: Benjamin
Geschrieben am: 15.03.2005 21:12:09
Hallo,
ich habe ein Userform erstellt und der Anwender soll hier das Datum eintragen.
Im Moment muss er das Datum in der Form tt.mm.jj oder tt.mm.jjjj eingeben.
Gibt es eine Funktion, dass Excel die Punkte automatisch setzt so dass der User z.B. nur 140305 eingeben muss ?
Im Voraus besten Dank
Benjamin

Bild

Betrifft: AW: Userform - Datumseingabe
von: Hajo_Zi
Geschrieben am: 15.03.2005 21:14:42
Hallo Benjamin,
dazu brauchst Du schon etwas Code.

Option Explicit
Dim BoEnter As Boolean
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    '   erstellt von Hajo.ziplies@web.de  Stand 01.08.03
    '   Datumseingabe  01.01.03;1.1.03 oder komlettes Jahr
    '   Eingabe des Tages und des Monat zweistellig werden die Punkte automatisch gesetzt
    '   sie können nur gelöscht durch markierung des punktes und der Zahl davor
    '   Buchstaben werden ausgeschlossen, nur Zahlen und Punkt
    '   die Überprüfung ob Datum erfolgt in Private Sub TextBox6_AfterUpdate()
    Select Case KeyAscii
        Case Asc("0") To Asc("9")
        Case Asc(".")
            If Len(TextBox6) = 0 Then
                KeyAscii = 0
            Else
                If Len(TextBox6) - Len(Application.Substitute(TextBox6, ".", "")) = 2 Then
                    KeyAscii = 0
                ElseIf Len(TextBox6) > 1 Then
                    If Mid(TextBox6, Len(TextBox6), 1) = "." Then KeyAscii = 0
                Else
                    KeyAscii = Asc(".")
                End If
            End If
        Case Else
            KeyAscii = 0
    End Select
End Sub
Private Sub TextBox6_Change()
    If BoEnter = True Then Exit Sub
    If Len(TextBox6) = 2 Then
        If InStr(TextBox6, ".") = 0 And BoEnter = False Then TextBox6 = TextBox6 & "."
    ElseIf Len(TextBox6) = 5 Then
        If Len(TextBox6) - Len(Application.Substitute(TextBox6, ".", "")) < 2 Then
            TextBox6 = TextBox6 & "."
        End If
    End If
End Sub
Private Sub TextBox6_AfterUpdate()
    BoEnter = True
    If Right(TextBox6, 1) = "." Then TextBox6 = Mid(TextBox6, 1, Len(TextBox6) - 1)
    '   Jahreszahl vom aktuellen Jahr ergänzen falls nicht vorhanden
    If Len(TextBox6) - Len(Application.Substitute(TextBox6, ".", "")) = 1 Then
        TextBox6 = TextBox6 & "." & Year(Date)
    End If
    If IsDate(TextBox6.Text) Then
        If Format(CDate(TextBox6.Value), "dd.mm.yy") <> TextBox6 Then
            MsgBox "Das Datum wurde übersetzt"
        End If
        TextBox6 = Format(CDate(TextBox6.Value), "dd.mm.yy")
    Else
        TextBox6 = ""
    End If
    BoEnter = False
End Sub

Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.


Bild

Betrifft: AW: Userform - Datumseingabe
von: Benjamin
Geschrieben am: 15.03.2005 21:20:17
Und an welcher Stelle muss ich den Code einfügen ?
Direkt in den Code des entsprechenden Feldes ?
Im Moment steht da nämlich nur, dass Excel die Eingabe zB in die Zelle A13 eintragen soll
Bild

Betrifft: AW: Userform - Datumseingabe
von: Hajo_Zi
Geschrieben am: 15.03.2005 21:24:59
Hallo Benjamin
das is ein Code für eine Userform.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.
Bild

Betrifft: AW: Userform - Datumseingabe
von: Benjamin
Geschrieben am: 15.03.2005 21:30:15
Hallo,
also dies ist der Code, welchen ich bis jetzt habe:
'Eingabewerte in die Tabelle eintragen
Private Sub Übernehmen_Click_Click()
ActiveSheet.Range("B7") = TextBox1.Value 'Name'
ActiveSheet.Range("B8") = TextBox2.Value 'PID'
ActiveSheet.Range("F7") = TextBox3.Value 'Monat'
ActiveSheet.Range("B10") = ComboBox1.Value 'Pflegestufe'
ActiveSheet.Range("B11") = ComboBox2.Value 'Beihilfe'
ActiveSheet.Range("C16") = TextBox6.Value 'Anspruch von'
ActiveSheet.Range("C17") = TextBox7.Value 'Anspruch bis'
Unload Me

Nun soll in TextBox6 und TextBox7 das Datum eingetragen werden können.
Wie muss ich denn den Code verändern damit das Datum in ttmmjj eingetragen werden kann?
Sorry, bin aber der absolute Laie in VBA.
Im Vorraus besten Dank
Benjamin
Bild

Betrifft: AW: Userform - Datumseingabe
von: Hajo_Zi
Geschrieben am: 15.03.2005 21:35:54
Hallo Benamin,
es fehlt ein End Sub. Was ist das für eine Aktion "Private Sub Übernehmen_Click_Click()"
Ich würde niemals Namen von Steuerelementen mit Ereignissen kombinieren.
Das Du meinen Code in Deine Userform kopiert und den Steuereelementenamen angepast?
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.
Bild

Betrifft: AW: Userform - Datumseingabe
von: Benjamin
Geschrieben am: 15.03.2005 21:39:22
Hallo,
ich habe ihn noch nicht kopiert und angepasst, da ich nicht genau weiß wo ich ihn einfügen muss bzw. wo ich ihn anpassen müsste.
Dies ist der ganze Code: : (hab leider nur den Anfang kopiert gehabt)

'Eingabewerte in die Tabelle eintragen

Private Sub Übernehmen_Click_Click()
ActiveSheet.Range("B7") = TextBox1.Value 'Name'
ActiveSheet.Range("B8") = TextBox2.Value 'PID'
ActiveSheet.Range("F7") = TextBox3.Value 'Monat'
ActiveSheet.Range("B10") = ComboBox1.Value 'Pflegestufe'
ActiveSheet.Range("B11") = ComboBox2.Value 'Beihilfe'
ActiveSheet.Range("C16") = TextBox6.Value 'Anspruch von'
ActiveSheet.Range("C17") = TextBox7.Value 'Anspruch bis'
Unload Me
'Bereich drucken
Dim colly As New Collection
Dim Druckbereich
Set Druckbereich = ActiveSheet.Range("A1:G32")
For Each zelle In Druckbereich
     If zelle.Interior.ColorIndex = 34 Then
     colly.Add zelle.AddressLocal
     zelle.Interior.ColorIndex = -4142
     End If
Next
ActiveSheet.PageSetup.CenterHorizontally = True
Druckbereich.PrintOut
For Each wert In colly
    Range(wert).Interior.ColorIndex = 34
Next
Set colly = Nothing
ActiveSheet.DisplayPageBreaks = False
'Formular löschen
' manuelle Felder leeren
    Range("B7:D7").Select
    Selection.ClearContents
    Range("B8:D8").Select
    Selection.ClearContents
    Range("B10").Select
    Selection.ClearContents
    Range("B11").Select
    Selection.ClearContents
    Range("C16").Select
    Selection.ClearContents
    Range("C17").Select
    Selection.ClearContents
    Range("F7:G7").Select
    Selection.ClearContents
    
'zurück zur Auswahl
 Sheets("Auswahl").Select
End Sub

Bild

Betrifft: AW: Userform - Datumseingabe
von: Hajo_Zi
Geschrieben am: 15.03.2005 21:41:05
Hallo Benjamin,
ich hatte geschrieben das der Code für eine Userform ist. Darum vertehe ich dieses Aussage nicht
" da ich nicht genau weiß wo ich ihn einfügen muss "
Ich mach Feierabend.
Gruß Hajo
Das Forum lebt auch von den Rückmeldungen.
Bild

Betrifft: AW: Userform - Datumseingabe
von: Benjamin
Geschrieben am: 15.03.2005 21:43:05
Das Problem ist nur, dass es in das bestehende Userform eingebaut werden muss
Bild

Betrifft: Userform - Datumseingabe ohne Punkte
von: Boris
Geschrieben am: 15.03.2005 22:51:45
Hi Benjamin,
wenn du das Datum in einer Textbox auf deinem Userform eingeben möchtest, dann Doppelklick auf die Textbox und folgenden Code interlegen (hier wird das Datum in Zelle A1 übernommen):

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(TextBox1) Then
    If IsDate(Format(TextBox1, "00-00-0" & IIf(Len(TextBox1) > 6, "000", "0"))) Then
        Sheets(1).[a1] = CDate(Format(TextBox1, "00-00-0" & IIf(Len(TextBox1) > 6, "000", "0")))
    End If
End If
End Sub

Den Namen der Textbox musst du anpassen.
Grüße Boris
Bild

Betrifft: Am besten: Punkte verbieten...
von: Boris
Geschrieben am: 15.03.2005 22:59:22
Hi,
der Code führt zu einem Fehler, wenn das Datum dann doch mit Punkten eingegeben wird (TT.MM.JJ oder so...).
Den Fehler könnte man natürlich auch noch abfangen und das Datum entsprechend verarbeiten - aber man könnte die Punkteingabe auch verbieten:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If InStr(1, TextBox1, ".") Then
    MsgBox "Bitte datum ohne Punkte eingeben!", 64, "Hinweis..."
    Exit Sub
Else
    If IsNumeric(TextBox1) Then
        If IsDate(Format(TextBox1, "00-00-0" & IIf(Len(TextBox1) > 6, "000", "0"))) Then
            Sheets(1).[a1] = CDate(Format(TextBox1, "00-00-0" & IIf(Len(TextBox1) > 6, "000", "0")))
        End If
    End If
End If
End Sub

Alternativ kann man natürlich auch den Keycode im Up/Press-Ereignis abfragen - aber das führt hier wohl zu weit.
Grüße Boris
Bild

Betrifft: AW: Userform - Datumseingabe ohne Punkte
von: benjamin
Geschrieben am: 15.03.2005 22:59:34
Und was muss ich bei meinem Code dann löschen ?
Eingabewerte in die Tabelle eintragen
Private Sub Übernehmen_Click_Click()
ActiveSheet.Range("B7") = TextBox1.Value 'Name'
ActiveSheet.Range("B8") = TextBox2.Value 'PID'
ActiveSheet.Range("F7") = TextBox3.Value 'Monat'
ActiveSheet.Range("B10") = ComboBox1.Value 'Pflegestufe'
ActiveSheet.Range("B11") = ComboBox2.Value 'Beihilfe'
ActiveSheet.Range("C16") = TextBox6.Value 'Anspruch von'
ActiveSheet.Range("C17") = TextBox7.Value 'Anspruch bis'
Unload Me
Bild

Betrifft: AW: Userform - Datumseingabe ohne Punkte
von: Benjamnin
Geschrieben am: 15.03.2005 23:04:24
Hallo,
jetzt blicke ich leider gar nicht mehr durch.
Was muss ich denn wie ändern ?
Der komplette Code den ich bis jetzt habe lautet:
'Eingabewerte in die Tabelle eintragen

Private Sub Übernehmen_Click_Click()
ActiveSheet.Range("B7") = TextBox1.Value 'Name'
ActiveSheet.Range("B8") = TextBox2.Value 'PID'
ActiveSheet.Range("F7") = TextBox3.Value 'Monat'
ActiveSheet.Range("B10") = ComboBox1.Value 'Pflegestufe'
ActiveSheet.Range("B11") = ComboBox2.Value 'Beihilfe'
ActiveSheet.Range("C16") = TextBox6.Value 'Anspruch von'
ActiveSheet.Range("C17") = TextBox7.Value 'Anspruch bis'
Unload Me
'Bereich drucken
Dim colly As New Collection
Dim Druckbereich
Set Druckbereich = ActiveSheet.Range("A1:G32")
For Each zelle In Druckbereich
     If zelle.Interior.ColorIndex = 34 Then
     colly.Add zelle.AddressLocal
     zelle.Interior.ColorIndex = -4142
     End If
Next
ActiveSheet.PageSetup.CenterHorizontally = True
Druckbereich.PrintOut
For Each wert In colly
    Range(wert).Interior.ColorIndex = 34
Next
Set colly = Nothing
ActiveSheet.DisplayPageBreaks = False
'Formular löschen
' manuelle Felder leeren
    Range("B7:D7").Select
    Selection.ClearContents
    Range("B8:D8").Select
    Selection.ClearContents
    Range("B10").Select
    Selection.ClearContents
    Range("B11").Select
    Selection.ClearContents
    Range("C16").Select
    Selection.ClearContents
    Range("C17").Select
    Selection.ClearContents
    Range("F7:G7").Select
    Selection.ClearContents
    
'zurück zur Auswahl
 Sheets("Auswahl").Select
End Sub


Einen extra Code für das Textfeld habe ich noch nicht.
Danke für die Hilfe
Benjamin
Bild

Betrifft: AW: Userform - Datumseingabe ohne Punkte
von: Benjamnin
Geschrieben am: 15.03.2005 23:04:33
Hallo,
jetzt blicke ich leider gar nicht mehr durch.
Was muss ich denn wie ändern ?
Der komplette Code den ich bis jetzt habe lautet:
'Eingabewerte in die Tabelle eintragen

Private Sub Übernehmen_Click_Click()
ActiveSheet.Range("B7") = TextBox1.Value 'Name'
ActiveSheet.Range("B8") = TextBox2.Value 'PID'
ActiveSheet.Range("F7") = TextBox3.Value 'Monat'
ActiveSheet.Range("B10") = ComboBox1.Value 'Pflegestufe'
ActiveSheet.Range("B11") = ComboBox2.Value 'Beihilfe'
ActiveSheet.Range("C16") = TextBox6.Value 'Anspruch von'
ActiveSheet.Range("C17") = TextBox7.Value 'Anspruch bis'
Unload Me
'Bereich drucken
Dim colly As New Collection
Dim Druckbereich
Set Druckbereich = ActiveSheet.Range("A1:G32")
For Each zelle In Druckbereich
     If zelle.Interior.ColorIndex = 34 Then
     colly.Add zelle.AddressLocal
     zelle.Interior.ColorIndex = -4142
     End If
Next
ActiveSheet.PageSetup.CenterHorizontally = True
Druckbereich.PrintOut
For Each wert In colly
    Range(wert).Interior.ColorIndex = 34
Next
Set colly = Nothing
ActiveSheet.DisplayPageBreaks = False
'Formular löschen
' manuelle Felder leeren
    Range("B7:D7").Select
    Selection.ClearContents
    Range("B8:D8").Select
    Selection.ClearContents
    Range("B10").Select
    Selection.ClearContents
    Range("B11").Select
    Selection.ClearContents
    Range("C16").Select
    Selection.ClearContents
    Range("C17").Select
    Selection.ClearContents
    Range("F7:G7").Select
    Selection.ClearContents
    
'zurück zur Auswahl
 Sheets("Auswahl").Select
End Sub


Einen extra Code für das Textfeld habe ich noch nicht.
Danke für die Hilfe
Benjamin
Bild

Betrifft: AW: Userform - Datumseingabe ohne Punkte
von: Boris
Geschrieben am: 15.03.2005 23:11:50
Hi,
du hast 2 Möglichkeiten:
Entweder du fragst die Datumseingabe direkt in der Textbox nach / bei Eingabe ab, oder aber erst in dem Moment, wo du deinen Commandbutton betätigst.
Bei letzterer Variante musst die Prüfung halt im Code des Buttons vornehmen - hier mal bezogen auf Textbox6:

Private Sub Übernehmen_Click_Click()
If InStr(1, TextBox6, ".") Then
    MsgBox "Bitte datum ohne Punkte eingeben!", 64, "Hinweis..."
    Exit Sub
Else
    If IsNumeric(TextBox6) Then
        If IsDate(Format(TextBox6, "00-00-0" & IIf(Len(TextBox6) > 6, "000", "0"))) Then
            ActiveSheet.[c16] = CDate(Format(TextBox6, "00-00-0" & IIf(Len(TextBox6) > 6, "000", "0")))
        End If
    Else
        MsgBox "Textbox6 enthält kein Datum!", 64, "Hinweis..."
    End If
End If
End Sub

Also nicht einfach ActiveSheet.Range("C16") = TextBox6.Value 'Anspruch von'
sondern stattdessen eben den gesamten Codeteil.
Das Selbe musst du mit Textbox7 auch machen.
Grüße Boris
Bild

Betrifft: AW: Userform - Datumseingabe ohne Punkte
von: Benjamnin
Geschrieben am: 15.03.2005 23:17:04
Also, irgendwie blick ich es nicht
Sorry aber ich bekomm es nicht an die richtige Stelle eingebunden.
Ich hab leider von VBA nicht so richtig den Plan
An welcher Stelle muss ich es denn genau einbinden ?
Herzlichen Dank
Bild

Betrifft: AW: Userform - Datumseingabe ohne Punkte
von: Boris
Geschrieben am: 15.03.2005 23:26:46
Hi,
nur mal bezogen auf die Textbox6:

Private Sub Übernehmen_Click_Click()
ActiveSheet.Range("B7") = TextBox1.Value 'Name'
ActiveSheet.Range("B8") = TextBox2.Value 'PID'
ActiveSheet.Range("F7") = TextBox3.Value 'Monat'
ActiveSheet.Range("B10") = ComboBox1.Value 'Pflegestufe'
ActiveSheet.Range("B11") = ComboBox2.Value 'Beihilfe'
If InStr(1, TextBox6, ".") Then
    MsgBox "Bitte datum ohne Punkte eingeben!", 64, "Hinweis..."
    Exit Sub
Else
    If IsNumeric(TextBox6) Then
        If IsDate(Format(TextBox6, "00-00-0" & IIf(Len(TextBox6) > 6, "000", "0"))) Then
            ActiveSheet.[c16] = CDate(Format(TextBox6, "00-00-0" & IIf(Len(TextBox6) > 6, "000", "0")))
        End If
    Else
        MsgBox "Textbox6 enthält kein Datum!", 64, "Hinweis..."
    End If
End If
ActiveSheet.Range("C17") = TextBox7.Value 'Anspruch bis'
Unload Me
'Bereich drucken
Dim colly As New Collection
Dim Druckbereich
Set Druckbereich = ActiveSheet.Range("A1:G32")
For Each zelle In Druckbereich
     If zelle.Interior.ColorIndex = 34 Then
     colly.Add zelle.AddressLocal
     zelle.Interior.ColorIndex = -4142
     End If
Next
ActiveSheet.PageSetup.CenterHorizontally = True
Druckbereich.PrintOut
For Each wert In colly
    Range(wert).Interior.ColorIndex = 34
Next
Set colly = Nothing
ActiveSheet.DisplayPageBreaks = False
'Formular löschen
' manuelle Felder leeren
    Range("B7:D7").Select
    Selection.ClearContents
    Range("B8:D8").Select
    Selection.ClearContents
    Range("B10").Select
    Selection.ClearContents
    Range("B11").Select
    Selection.ClearContents
    Range("C16").Select
    Selection.ClearContents
    Range("C17").Select
    Selection.ClearContents
    Range("F7:G7").Select
    Selection.ClearContents
    
'zurück zur Auswahl
 Sheets("Auswahl").Select
End Sub

Grüße Boris
Bild

Betrifft: AW: Userform - Datumseingabe ohne Punkte
von: Benjamnin
Geschrieben am: 15.03.2005 23:29:41
Hallo,
herzlichen Dank für die tolle Hilfe.
Jetzt funktioniert es. Die andere Textboxen bekomm ich dann von alleine hin :-)
Nochmals Danke und noch einen schönen Abend
Benjamin
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Userform - Datumseingabe"