TextBox / Datum

Hallo Experten !

Mit dem folgenden UserForm möchte ich unter anderem dem User
ermöglichen in der TextBox (DganzenTag) ein Datum einzugeben.

Wie kann ich aber sicherstellen, dass wirklich ein Datum mit dem
Format tt.dd.jjjj eingegeben wird?

Grüße und vielen Dank!!!
Peter

Option Explicit

Private Sub CheckBox1_Click()

If CheckBox1 = True Then DganzenTag.Enabled = True
If CheckBox1 = False Then DganzenTag.Enabled = False

End Sub

Private Sub CommandButton1_Click()

Selection.GoTo What:=wdGoToBookmark, Name:=„Name“
Selection.TypeText Text:=TextBox1
Selection.GoTo What:=wdGoToBookmark, Name:=„Abt“
Selection.TypeText Text:=TextBox2
Selection.GoTo What:=wdGoToBookmark, Name:=„Tel“
Selection.TypeText Text:=TextBox3

Selection.GoTo What:=wdGoToBookmark, Name:=„ganzenTag1“

If OptionButton1.Value = True Then Selection.TypeText
Text:=„TextBox1“
If OptionButton2.Value = True Then Selection.TypeText
Text:=„TextBox2“
If OptionButton3.Value = True Then Selection.TypeText
Text:=„TextBox3“

Selection.GoTo What:=wdGoToBookmark, Name:=„ganzenTag1“

If CheckBox1 = True Then Selection.InsertSymbol Font:=„Wingdings“, _
CharacterNumber:=253: Selection.TypeText Text:=" Ganzer Tag am ":
Selection.TypeText Text:=DganzenTag
Unload Me

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Private Sub UserForm_Initialize()

MsgBox "Der hinterlegte Benutzername: " & Application.UserName
Zeitausgleich.Show

End Sub

Hallo,

Wie kann ich aber sicherstellen, dass wirklich ein Datum mit
dem
Format tt.dd.jjjj eingegeben wird?

am bequemsten, indem Du nichts eingeben läßt, sondern DTPicker oder Monthview o.ä. verwendest. Das ist doch schon fertig.

Notfalls so:

Private Sub Text1\_Validate(Cancel As Boolean)
 On Error GoTo Errhandler
 dt = DateValue(Text1.Text)
 Exit Sub
Errhandler:
 On Error GoTo 0
 Cancel = True
End Sub

Das geht auch, aber DtPicker find’ ich besser. :smile:

Gruß, Rainer

-TextBox4.Text und TextBox5.Text müssen irgendwie Datumsangaben des
Users sein (beim Verlassen der EingabeBox bzw. alt. ListenBox pp.!-

Hallo Experten!
Hallo Rainer!

Leider konnte ich Deinen Lösungsvorschlag nicht umsetzten. Bin
Neueinstieger hinsichtlich VBA.

Kannst Du mir das genauer erklären?

TextBox4.Text und TextBox5.Text müssen irgendwie Datumsangaben des
Users sein (beim Verlassen der EingabeBox bzw. alt. ListenBox pp.!

Vielen Dank für die Mühe!

Grüße

Peter

Option Explicit
Private Sub CommandButton1_Click()

Selection.GoTo What:=wdGoToBookmark, Name:=„Name“ ‚TextBox1 =
Name‘
Selection.TypeText Text:=TextBox1
Selection.GoTo What:=wdGoToBookmark, Name:=„Abt“ ‚TextBox1 =
Abt‘
Selection.TypeText Text:=TextBox2
Selection.GoTo What:=wdGoToBookmark, Name:=„Tel“ ‚TextBox1 =
Tel‘
Selection.TypeText Text:=TextBox3

Selection.GoTo What:=wdGoToBookmark, Name:=„ganzenTag1“
If CheckBox1 = True Then Selection.InsertSymbol Font:=„Wingdings“, _
CharacterNumber:=253: Selection.TypeText Text:=" Ganzer Tag am ":
Selection.TypeText Text:=TextBox4

Selection.GoTo What:=wdGoToBookmark, Name:=„ganzenTag2“
If CheckBox2 = True Then Selection.InsertSymbol Font:=„Wingdings“, _
CharacterNumber:=253: Selection.TypeText Text:=" Ganzer Tag am ":
Selection.TypeText Text:=TextBox5

Unload Me
End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Private Sub CheckBox1_Click()
TextBox4.Text = Date + 1 ‚TextBox4 =
Erster ganzer Tag‘
If CheckBox1 = True Then TextBox4.Enabled = True
If CheckBox1 = False Then TextBox4.Enabled = False
End Sub

Private Sub CheckBox2_Click()
TextBox5.Text = Date + 2
If CheckBox2 = True Then TextBox5.Enabled = True ‚TextBox4 =
Zweiter ganzer Tag‘
If CheckBox2 = False Then TextBox5.Enabled = False
End Sub

Private Sub TextBox1_Enter()
TextBox1 = Left(Application.UserName, Len(Application.UserName) - 1)
& „,“

End Sub

Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
IsDate (TextBox5.Text)
End Sub

Private Sub UserForm_Initialize()
MsgBox "Der hinterlegte Benutzername: " &
Left(Application.UserName, Len(Application.UserName) - 1)
Zeitausgleich.Show

End Sub

Hallo,

Wie kann ich aber sicherstellen, dass wirklich ein Datum mit
dem
Format tt.mm.jjjj eingegeben wird?

am bequemsten, indem Du nichts eingeben läßt, sondern DTPicker
oder Monthview o.ä. verwendest. Das ist doch schon fertig.

Notfalls so:

Private Sub Text1_Validate(Cancel As Boolean)
On Error GoTo Errhandler
dt = DateValue(Text1.Text)
Exit Sub
Errhandler:
On Error GoTo 0
Cancel = True
End Sub

Das geht auch, aber DtPicker find’ ich besser. :smile:

Gruß, Rainer

VBA? keine Ahnung
Hallo Peter,

sorry, ich habe nicht bemerkt, daß es um VBA geht, sonst hätte ich gar nicht erst geantwortet. Mit VBA kenne ich mich gar nicht aus, nur mit VB6.

Gruß, Rainer

TextBox.Tex im Datumsformat!?
Hallo Experten!

Leider konnte ich Deinen Lösungsvorschlag nicht umsetzten. Bin
Neueinstieger hinsichtlich VBA.

Kannst Du mir das genauer erklären?

TextBox4.Text und TextBox5.Text müssen irgendwie Datumsangaben des
Users sein (beim Verlassen der EingabeBox bzw. alt. ListenBox pp.!

Vielen Dank für die Mühe!

Grüße

Peter

Option Explicit
Private Sub CommandButton1_Click()

Selection.GoTo What:=wdGoToBookmark, Name:=„Name“ ‚TextBox1 =
Name‘
Selection.TypeText Text:=TextBox1
Selection.GoTo What:=wdGoToBookmark, Name:=„Abt“ ‚TextBox1 =
Abt‘
Selection.TypeText Text:=TextBox2
Selection.GoTo What:=wdGoToBookmark, Name:=„Tel“ ‚TextBox1 =
Tel‘
Selection.TypeText Text:=TextBox3

Selection.GoTo What:=wdGoToBookmark, Name:=„ganzenTag1“
If CheckBox1 = True Then Selection.InsertSymbol Font:=„Wingdings“, _
CharacterNumber:=253: Selection.TypeText Text:=" Ganzer Tag am ":
Selection.TypeText Text:=TextBox4

Selection.GoTo What:=wdGoToBookmark, Name:=„ganzenTag2“
If CheckBox2 = True Then Selection.InsertSymbol Font:=„Wingdings“, _
CharacterNumber:=253: Selection.TypeText Text:=" Ganzer Tag am ":
Selection.TypeText Text:=TextBox5

Unload Me
End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Private Sub CheckBox1_Click()
TextBox4.Text = Date + 1 ‚TextBox4 =
Erster ganzer Tag‘
If CheckBox1 = True Then TextBox4.Enabled = True
If CheckBox1 = False Then TextBox4.Enabled = False
End Sub

Private Sub CheckBox2_Click()
TextBox5.Text = Date + 2
If CheckBox2 = True Then TextBox5.Enabled = True ‚TextBox4 =
Zweiter ganzer Tag‘
If CheckBox2 = False Then TextBox5.Enabled = False
End Sub

Private Sub TextBox1_Enter()
TextBox1 = Left(Application.UserName, Len(Application.UserName) - 1)
& „,“

End Sub

Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
IsDate (TextBox5.Text)
End Sub

Private Sub UserForm_Initialize()
MsgBox "Der hinterlegte Benutzername: " &
Left(Application.UserName, Len(Application.UserName) - 1)
Zeitausgleich.Show

End Sub

Hallo,

Wie kann ich aber sicherstellen, dass wirklich ein Datum mit
dem
Format tt.mm.jjjj eingegeben wird?

am bequemsten, indem Du nichts eingeben läßt, sondern DTPicker
oder Monthview o.ä. verwendest. Das ist doch schon fertig.

Notfalls so:

Private Sub Text1_Validate(Cancel As Boolean)
On Error GoTo Errhandler
dt = DateValue(Text1.Text)
Exit Sub
Errhandler:
On Error GoTo 0
Cancel = True
End Sub

Das geht auch, aber DtPicker find’ ich besser. :smile:

Gruß, Rainer

Optionen

Zurück

Weiter

Referenzartikel

Antwort-Artikel schreiben

Neuen Artikel schreiben

E-Mail an den Autor schreiben

Antworten auf diesen Artikel per E-Mail bestellen

Fester Link dieses Artikels

Artikel abspeichern

Artikelbaum abspeichern

Hilfe zu Bewertungen

Bücher zum Thema ‚VBA‘ suchen

Zurück

Referenzartikel

Weiter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Wiemann.

Du wirst in der Tat besser damit beraten sein, wenn Du einen Kalender verwendest. Dieser sollte, je nach Office-Version und/oder Installationsumfang in VBA verfügbar sein.

Da Du gesagt hast, dass Du Neueinsteiger bist, werde ich Dir einfach mal beschreiben, wie Du an den Kalender rankommst:

  • gehe von Excel aus über das Menü „Extras“ > „Makro“ > „Visual Basic-Editor“ in den Visual Basic-Editor.
  • öffne durch Doppelklick irgendein UserForm.
  • klicke im Menü „Ansicht“ auf „Werzeugsammlung“.
  • klicke mit der rechten Maustaste auf die Werkzeugsammlung.
  • klicke in dem nun angezeigten Kontextmenü auf „Zusätzliche Steuerelemente“.
  • nun öffnet sich ein Dialog, der eine Liste mit allen weiteren verfügbaren Steuerelementen enthält.
  • bitte durchsuche diese Liste nach dem Eintrag „Kalender-Steuerelement x.x“ (x.x ist die Versions-Nr. des Kalenders)
  • klicke auf das kleine Viereck links neben dem Text „Kalender-Steuerelement“.
  • beende den Dialog mit „OK“.

So, nun sollte in der Werkzeugsammlung der Kalender als neues Steuerelement vorhanden sein.

Sollte das Kalendersteuerelement überhaupt nicht in der Liste der verfügbaren Steuerelemente aufgeführt sein, dann musst Du bitte Deine Office-CD einlegen und mal ein Setup durchführen.

Wenn der Kalender vorhanden ist empfehle ich folgende weitere Vorgehensweise:

  • füge Denem Projekt ein weiteres UserForm hinzu.

  • gebe dem UserForm den Namen „frmKalender“.

  • platziere ein Kalender-Steuerelement auf dem UserForm.

  • öffne das UserForm, auf dem sich die Textbox befindet, in die der User das Datum eintragen soll.

  • füge dieser UserForm einen CommandButton neben der entsprechenden Textbox hinzu.
    -Doppelklicke auf den CommandButton, sodass sich das CodeFenster öffnet.

  • füge folgenden Code in das Click-Ereignis des CommandButtons:

    Dim Form As New frmKalender
    Form.Show vbModal
    Set Form = Nothing

Vorerst mal soweit. Im Ergebnis solltest Du jetzt von Deinem Formular mit der Textbox für’s Datum per Klick auf den CommandButton das Formular mit dem Kalender aufrufen können.

Viele Grüße
Carsten

Hallo Carsten!
Habe ich alles so gemacht! Super läuft!!!
Mit Calendar1 kann ich den Wert auslesen? Wie bekomme ich den
Kalender wieder ?weg?? ?unload me? geht nicht.
Wie bekomme ich die Auswahl in das Textfeld?

Vielen lieben Dank für die ausführliche Anleitung!

Grüße
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter.

Freut mich, dass ich helfen konnte.

Es gibt jetzt sehr viele Möglichkeiten, das Datum in die Textbox einzufügen. Ich denke, die beste wird sein, eine öffentliche Funktion dafür zu programmieren, da diese dann quasi von überall aus aufgerufen werden kann. Das ist dann sinnvoll, wenn Du noch andere Formulare hast, in denen ein Datum eingetragen werden muss.

Hier kommt der Code, den Du dann bitte irgendwo in das Code-Fenster der UserForm mit der TextBox für das Datum einträgst, am besten nach ganz unten:

Public Function DatumEinfuegen(Optional Datum As String = vbNullChar)
 txtDatum.Text = Datum
End Function

Dies ist also eine öffentliche (Public) Funktion. Was dahinter in Klammern steht, bedeutet folgendes:

  • Optional : Die Eingabe eines Wertes bei Aufruf der Funktion ist nicht erforderlich.
  • Datum : Die Variable, die den Wert bei Aufruf der Funktion „speichert“.
  • As String : Datentyp der Variablen, die den Wert „speichert“, in diesem Fall eine Zeichenfolge.
  • = vbNullChar : ein Standardwert, der in die Variable geschrieben wird, sofern bei Aufruf der Funktion kein Wert eingegeben wird, in diesem Fall eine Zeichenfolge der Länge Null.
    Bitte beachte, dass der Name der Textbox in Deinem Code abweichen kann, Du müsstest dann den Namen Deiner Textbox in den Code eintragen.

So, jetzt öffne bitte das UserForm mit dem Kalender. Dort kannst Du diesen Code einfügen:

Private Sub Calendar1\_DblClick()
 frmEingabe.DatumEinfuegen (Calendar1.Value)
 Unload Me
End Sub

Hier gibt es allerdings auch noch etwas zu beachten. Bei mir hat das UserForm mit der TextBox für das Datum dan Namen frmEingabe, daher müsstest Du den Code noch dahingehend anpassen, dass Du den Namen Deines UserForms dort hinschreibst. Falls Du das Kalender-Steuerelement anders genannt hast als „Calendar1“, dann muss auch dies im Code angepasst werden.

Dir ist bestimmt aufgefallen, dass der Code im Doppelklick-Ereignis des Kalender-Steuerelementes steht. Das habe ich gemacht, weil es für den Anfang die allerkürzeste Variante ist. Im Ergebnis sollte jetzt folgendes passieren:
Nach Aufruf des UserForms mit dem Kalender kannst Du in dem Kalender hin- und herklicken und irgendein Datum auswählen. Wenn das ausgewählte Datum in die Textbox übertragen werden soll, brauchst Du nur auf dieses Datum doppelklicken, dann erscheint das Datum in der Textbox und das UserForm mit dem Kalender wird entladen.

Kannst Du ja mal ausprobieren.

Viele Grüße
Carsten

Hallo und vielen leiben Dank für die sehr ausführliche und super verständliche Antwort! Läuft auch tatsächlich.
Doch leider kommt es dann doch zu folgender Fehlermeldung:
„Objektvariable oder With-Blockvariable nicht feststellbar“
Sagt Dir das was?
Grüße
Peter

Option Explicit

Private Sub CommandButton1_Click()

Selection.GoTo What:=wdGoToBookmark, Name:=„Name“ ‚TextBox1 = Name‘
Selection.TypeText Text:=TextBox1
Selection.GoTo What:=wdGoToBookmark, Name:=„Abt“ ‚TextBox2 = Abt‘
Selection.TypeText Text:=TextBox2
Selection.GoTo What:=wdGoToBookmark, Name:=„Tel“ ‚TextBox3 = Tel‘
Selection.TypeText Text:=TextBox3

Selection.GoTo What:=wdGoToBookmark, Name:=„ganzenTag1“
If CheckBox1 = True Then Selection.InsertSymbol Font:=„Wingdings“, _
CharacterNumber:=253: Selection.TypeText Text:=" Ganzer Tag am ": Selection.TypeText Text:=TextBox4

Selection.GoTo What:=wdGoToBookmark, Name:=„ganzenTag2“
If CheckBox2 = True Then Selection.InsertSymbol Font:=„Wingdings“, _
CharacterNumber:=253: Selection.TypeText Text:=" Ganzer Tag am ": Selection.TypeText Text:=TextBox5

Unload Me
End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Private Sub CheckBox1_Click()
Dim Form As New frmKalender

Form.Show vbModal

Set Form = Nothing
End Sub

Private Sub CheckBox2_Click()
MsgBox „text“
End Sub

Private Sub TextBox1_Enter()
TextBox1 = Left(Application.UserName, Len(Application.UserName) - 1) & „,“

End Sub

Private Sub UserForm_Initialize()

frmZeitausgleich.Show

End Sub

Public Function DatumEinfuegen(Optional Datum As String = vbNullChar)
TextBox4.Text = Datum
End Function

**************

Private Sub Calendar1_DblClick()
frmZeitausgleich.DatumEinfuegen (Calendar1.Value)
Unload Me
End Sub

Private Sub UserForm_Click()

End Sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter.

Doch leider kommt es dann doch zu folgender Fehlermeldung:
„Objektvariable oder With-Blockvariable nicht feststellbar“

Diese Fehlermeldung kenne ich zwar, jedoch müsstest Du mir sagen, wann diese Fehlermeldung auftritt, bzw. welcher Text gelb markiert ist, nachdem Du die Fehlermeldung mit „Debuggen“ weggeklickt hast.

Möglicherweise, aber das ist wirklich nur eine unsichere Mutmaßung, kennt VBA die Konstante „vbNullChar“ nicht, wenn kein VB installiert ist. Du kannst ja mal diese Konstante einfach durch zwei Anführungszeichen ersetzen. ("")

Viele Grüße
Carsten

1 Like

Hallo Carsten!
Der Fehler tritt im Grund zum Schluss auf

Beim Debuggen wird folgender Bereich:

Sub Formular()

frmZeitausgleich.Show

End Sub
angesprochen!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Carsten!
Vielen Dank! Läuft jetzt alles!

Grüße
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]