Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
688to692
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
688to692
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehlermeldung ausschließen

Fehlermeldung ausschließen
04.11.2005 10:12:50
Walter
Guten Morgen Fachdamen und Herren,
anbei habe ich folgendes Makro, natürlich auch über das Forum zusammengebastelt.
Ich möchte nun das man das MINUS Zeichen "-" eingeben darf.
Geht das ?
Hier das Makro:
'-------------------- NW Listenpreis anzeigen -------------------

Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If IsNumeric(TextBox2) = False And TextBox2 <> "" Then
MsgBox " Sie dürfen nur Ziffern eingeben", _
vbCritical, "Error !!!"
TextBox2 = Left(TextBox2, Len(TextBox2) - 1)
TextBox2 = "0.00"
TextBox2.SetFocus
With TextBox2
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
End Sub

Gruß Walter MB

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung ausschließen
04.11.2005 10:25:55
u_
Hallo,
If IsNumeric(TextBox2) = False And TextBox2 "" And Left(TextBox2, 1) "-" Then
Gruß
Geist ist geil!
Leider noch nicht
04.11.2005 10:41:00
Walter
Hallo U..
habe eingesetzt.
Wenn ich 25-2-.. jetzt wird schon die Fehlermeldung gebracht.
Ich möchte das Datum so eingeben 25-5-05 wenn ich die Fehlermeldung/Makro rausnehme
funktioniert meine Eingabe einwandfrei.
Ich wollte bei der Eingabe eines anderen Zeichens außer Zahlen und das MinusZeiche "-" die Eingabe verhindern.
Gruß Walter mb
AW: Leider noch nicht
04.11.2005 10:57:11
Alex
Hallo,
meiner Meinang nach wird es auf diesem Wege viel zu kompliziert,
die Eingabe auf ein richtiges Format hin zu überprüfen.
Mach doch lieber 3 Textboxen, in denen man Tag, Monat und Jahr
nur als Zahlen eingeben kann und bau Dir den String selber zusammen.
z.B.
d= t & "-" & m & "-" & j
Aber es gibt dann noch Probleme - was passiert, wenn
jemand den 31.2.05 eingibt?
Also evtl. das Datum in eine Zelle übertragen und das Format prüfen.
Anzeige
AW: Leider noch nicht
04.11.2005 11:59:12
Walter
Hallo Alex,
die Möglichkeit hatt ich auch schon ins "Auge" gefaßt.
Walter mb
AW: Leider noch nicht
04.11.2005 11:28:12
u_
Hallo,
ich würd erst beim Verlassen der TB prüfen, ob es sich um einen Datumsausdruck handelt oder nicht und dann entsprechend reagieren.

Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim dteTmp As Date
On Error Resume Next
dteTmp = DateValue(TextBox2)
On Error GoTo 0
If dteTmp = 0 Then
Cancel = True
MsgBox "Das ist kein Datum!"
TextBox2.SetFocus
Else
TextBox2 = Format(dteTmp, "DD.MM.YYYY")
End If
End Sub

Gruß
Geist ist geil!
Anzeige
Hallo U...
04.11.2005 12:40:43
Walter
Hallo U,
habe dein Makro eingesetzt, funktioniert.
Habe allerdings festgestellt das man nach der MsgBox "Das ist kein Datum!" nicht weiter kommt. Ich kann die Textbox nicht verlassen. Geht das zu machen? Wenn nicht na ja dann
lasse ich es.
Habe das Makro geändert da der Focus bzw.nicht makiert wurde.

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim dteTmp As Date
On Error Resume Next
dteTmp = DateValue(TextBox8)
On Error GoTo 0
If dteTmp = 0 Then
Cancel = True
MsgBox "Das ist kein Datum!"
TextBox8 = "mm-dd-yyyy"
TextBox8.SetFocus
With TextBox8
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
Else
ActiveCell.Offset(0, 5) = Format(TextBox8.Text, "mm-dd-yyyy")
TextBox8 = Format(dteTmp, "DD.MM.YYYY")
End If
End Sub

Gruß Walter mb
Anzeige
AW: Hallo U...
04.11.2005 13:01:22
u_
Hallo,

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim dteTmp As Date
If TextBox8 <> "mm-dd-yyyy" Then
On Error Resume Next
dteTmp = DateValue(TextBox8)
On Error GoTo 0
If dteTmp = 0 Then
Cancel = True
MsgBox "Das ist kein Datum!"
TextBox8 = "mm-dd-yyyy"
TextBox8.SetFocus
With TextBox8
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
Else
ActiveCell.Offset(0, 5) = Format(TextBox8.Text, "mm-dd-yyyy")
TextBox8 = Format(dteTmp, "DD.MM.YYYY")
End If
End If
End Sub

Gruß
Geist ist geil!
Danke o.t.
04.11.2005 13:43:05
Walter
Hallo U,
Super Danke, genau so !!!
Gruß Walter
Anzeige
AW: Textbox prüfen - Datum?
04.11.2005 11:28:46
Erich
Hallo Walter,
wenn ein Datum eingegeben werden soll:

If TextBox2 <> "" Then
If Not IsDate(TextBox2) Then

Wenn nur Ziffern und "-" eingegeben werden sollen:

If TextBox2 <> "" Then
If Not istNumMinus(TextBox2) Then

mit der Funktion

Function istNumMinus(txt$) As Boolean
Dim ii%
For ii = 1 To Len(txt)
Select Case Asc(Mid(txt, ii, 1))
Case 48 To 57  ' 0 bis 9
Case 45        ' -
Case Else: Exit Function
End Select
Next ii
istNumMinus = True
End Function

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Sch...
04.11.2005 12:08:56
Walter
Hallo Erich,
ich komme jetzt gar nicht klar.
Hier meine "normales Makro":

Private Sub TextBox8_AfterUpdate()
ActiveCell.Offset(0, 5) = Format(TextBox8.Text, "mm-dd-yyyy")        ' so muß
TextBox8.Text = ActiveCell.Offset(0, 5).Value
TextBox8.SetFocus
With TextBox8
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub

Vielleicht kannst Du mir das mal ergänzen ?
Gruß Walter mb
AW: Sch...
04.11.2005 13:57:35
Erich
Hallo Walter,
worauf kommt es dir eigentlich an?
Willst du
1. nur sicherstellen, dass der User ein gültiges Datum eingibt?
oder
2. den User zwingen, ein gültiges Datum im vorgegebenen Format, nur mit Ziffern und "-", einzugeben?
Für die beiden Möglichkeiten hier die Makros:

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(TextBox8) Then
ActiveCell.Offset(0, 5) = DateValue(TextBox8)
'     ActiveCell.Offset(0, 5) = Format(DateValue(TextBox8), "mm-dd-yyyy") ' als Text
Else
MsgBox "Das ist kein Datum!"
With TextBox8
.Text = "mm-dd-yyyy"
.SelStart = 0
.SelLength = Len(.Text)
.SetFocus
End With
Cancel = True
End If
End Sub
Private Sub xTextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim isOK As Boolean
If IsDate(TextBox8) Then
If istNumMinus(TextBox8) Then
ActiveCell.Offset(0, 5) = DateValue(TextBox8)
isOK = True
Else
MsgBox "Bitte das Datum im angegebenen Format eingeben!"
End If
Else
MsgBox "Das ist kein Datum!"
End If
If Not isOK Then
With TextBox8
.Text = "mm-dd-yyyy"
.SelStart = 0
.SelLength = Len(.Text)
.SetFocus
End With
Cancel = True
End If
End Sub

Noch eine Frage: Was soll nachher in der Zelle stehen?
1. ein Text mit dem Aussehen aa-bb-cccc, der wie ein gültiges Datum aussieht?
2. ein Datum (also eine ganze Zahl) im Format "dd-mm-yyyy"? (Damit lässt sich rechnen.)
Wenn 1. zutrifft, sollte die Zelle als Text formatiert sein, bei 2. mit dem in der vorigen Zeile stehenden Datumsformat.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Hallo ...
04.11.2005 16:12:24
Walter
Hallo Erich,
herzlichen Dank für die Info.
Zu Punkt 1.Ich möchte, sobald ein Buchstabe eingegeben wird das da die Meldebox kommt.
Ausgenommen davon das "-" Minus Zeichen, da so über die Zahlentastatur
schneller eingegeben werden kann.
Zu 1. Unter deiner Makros:
in der Zelle sollte dann evtl. das aktuelle Datum stehen, ist aber egal, kann
auch so wie beschrieben "mm-dd-jjjj" stehen, danach gibt ja der Anwender Neu ein.
Bin gleich unterwegs und teste nachher zu Hause.
Herzliche Grüße aus Krefeld-Uerdingen,
Walter mb
AW: Hallo ...
04.11.2005 17:48:31
Erich
Hallo Walter,
meine erste Frage hast du nicht wirklich beantwortet. Ich stelle sie noch mal - anders formuliert.
Du hast oben mal geschrieben: "Ich möchte das Datum so eingeben 25-5-05"
Die Textbox soll also am Ende ein Datum liefern. Das wäre schon mal meine 1. Möglichkeit.
Weiter hast du geschrieben: "Ich wollte bei der Eingabe eines anderen Zeichens außer Zahlen und das MinusZeiche "-" die Eingabe verhindern." Das wäre meine 2. Möglichkeit.
Ein gültigbes Datum könnte man auch mit Punkten oder Leerzeichen ("7 11 5" ergibt den 7.8.2005) eingeben. Willst du das verhindern?
Mittlerweile habe ich übrigens festgestellt, das IsDate() für die Prüfung auf ein gültiges Datum nicht ausreicht: IsDate("7 8 901") liefert WAHR, aber die Umwandlung in ein Datum schlägt fehl. Eine Erklärung: IsDate ist auch WAHR, wenn sich der Wert in eine Uhrzeit umwandeln lassen kann. Ich bleibe da dran...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Datum in Textbox prüfen
04.11.2005 19:16:58
Erich
Hallo Walter,
hier zwei neue Lösungen, die zweite mit deiner Einschränkung auf "-".
Das Zwischenspeichern in einer Tabellenzelle ist rausgefallen - wird nicht gebraucht.
Viel Spaß bei Testen!

Private Sub xTextBox8_BeforeUpdate(ByVal Cancel As ReturnBoolean)
Dim dd As Date, isOK As Boolean
With TextBox8
On Error Resume Next
dd = DateValue(.Text)
On Error GoTo 0
If Err = 0 And dd > 0 Then isOK = True Else Err = 0
If isOK Then
MsgBox "Das Datum ist " & dd
Else
.SelStart = 0
.SelLength = Len(.Text)
.SetFocus
Cancel = True
MsgBox "Das ist kein Datum!"
End If
End With
End Sub
Private Sub TextBox8_BeforeUpdate(ByVal Cancel As ReturnBoolean)
Dim dd As Date, isOK As Boolean
With TextBox8
If istNumMinus(.Text) Then
On Error Resume Next
dd = DateValue(.Text)
On Error GoTo 0
If Err = 0 And dd > 0 Then
isOK = True
Else
Err = 0
MsgBox "Das ist kein Datum!"
End If
Else
MsgBox "Bitte ein Datum im angegebenen Format eingeben!"
End If
If isOK Then
MsgBox "Das Datum ist " & dd
Else
.SelStart = 0
.SelLength = Len(.Text)
.SetFocus
Cancel = True
End If
End With
End Sub
Function istNumMinus(txt$) As Boolean
Dim ii%
For ii = 1 To Len(txt)
Select Case Asc(Mid(txt, ii, 1))
Case 48 To 57  ' 0 bis 9
Case 45        ' -
Case Else: Exit Function
End Select
Next ii
istNumMinus = True
End Function

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Datum in Textbox prüfen
04.11.2005 20:17:06
Walter
Hallo Erich,
habe beide Makros von Dir getestet. Geht beides leider nicht als direkte Info.
Eigenlich möchte ich das, wenn man einen Buchstaben eingibt, das dann schon die Meldung kommt. (Ausgenommen das Minuszeichen), so das der Anwender also nur das MINUSZEICHEN UND
ZAHLEN eingeben kann.
Hier das Makro von U: läuft auch das Format wie man eingeben soll steht dann auch in
der Textbox und man kann diese jederzeit verlassen oder Neu eingeben.
Das einzige was fehlt wäre eine direkte Warnung sobald ein Zeichen wie oben beschrieben gedrückt wird. Hatte hier schon gebastelt kriege das leider nicht hin, vielleicht DU ?
Makro:

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim dteTmp As Date
If TextBox8 <> "mm-dd-yyyy" Then    'jetzt hier rein
On Error Resume Next
dteTmp = DateValue(TextBox8)
On Error GoTo 0
If dteTmp = 0 Then
Cancel = True
'  MsgBox "Das ist kein Datum!"
MsgBox " Nur Datums-Eingabe erlaubt!", _
vbCritical, "Error !!!"
TextBox8 = "mm-dd-yyyy"
TextBox8.SetFocus
With TextBox8
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
Else
ActiveCell.Offset(0, 5) = Format(TextBox8.Text, "mm-dd-yyyy")
'  TextBox8.Text = Format(ActiveCell.Offset(0, 5),dteTmp, "DD.MM.YYYY")))
TextBox8 = Format(dteTmp, "DD.MM.YYYY")
End If
End If
End Sub

Gruß Walter mb
Anzeige
AW: Datum in Textbox prüfen
05.11.2005 00:57:53
Erich
Hallo Walter,
hast du in meinem letzten Beitrag den Hinweis auf
https://www.herber.de/forum/messages/691756.html nicht gelesen?
Die dort vorkommende Prozedur habe ich jetzt nur leicht abgewandelt. Sie verhindert, dass etwas anderes als Ziffern und "-" eingegeben wird:

Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not (Chr(KeyAscii) Like "[-0-9]") Then
' MsgBox "Bitte nur Ziffern 0 bis 9 oder das Minuszeichen eingeben!"
KeyAscii = 0
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Guten Morgen...
05.11.2005 10:26:32
Walter
Guten Morgen Erich,
erst einmal herzlichen Dank für die Mühe, das war schon eine Menge Infos von DIR.
Natürlich habe ich dein Infos alle gelesen.
Wollte eine Einfache Lösung, das oben stehende Makro ist genau das was ich brauche.
Funktioniert auch.
Darf ich denoch eine Frage stellen ?
Wenn ja: Gibt es die Möglichkeit das man die Textbox nicht verlassen kann, bis man ein
RICHTIGES Datum eingesetzt hat ?
Hier jetzt beide Makros, wie gesagt funktionieren:
'---------------------------------------------------------------------------------

Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not (Chr(KeyAscii) Like "[-0-9]") Then
MsgBox "Bitte nur Ziffern 0 bis 9 oder das Minuszeichen eingeben!", _
vbCritical, "Error !!!"
KeyAscii = 0
End If
End Sub

'------------------------------------------------------------------------

Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim dteTmp As Date
If TextBox5 <> "mm-dd-yyyy" Then    'jetzt hier rein
On Error Resume Next
dteTmp = DateValue(TextBox5)
On Error GoTo 0
If dteTmp = 0 Then
Cancel = True
MsgBox " Nur Datums-Eingabe erlaubt!", _
vbCritical, "Error !!!"
TextBox5 = "mm-dd-yyyy"
TextBox5.SetFocus
With TextBox5
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
Else
Range("G9").Value = Format(TextBox5.Text, "mm-dd-yyyy")
TextBox5.Text = Range("G9").Value
Label11.Caption = Range("G12").Value                    'Nutzd.Dauer in Tage
End If
End If
End Sub

'-----------------------------------------------------------------------------
Übrings schläft Du nicht Nachts ?
Herzliche Grüße aus Krefel-Uerdingen
Walter mb

AW: Guten Morgen...
05.11.2005 17:51:29
Erich
Guten Abend, Walter,
nach dem, was ich jetzt so hier im Forum gesehen habe, warst du doch schon beim Exit-Ereignis:
https://www.herber.de/forum/archiv/688to692/t691368.htm#691386
Hilfreich ist da auch die VBA-Hilfe (Stichwort "Enter-, Exit-Ereignisse", letzter Satz).
Da du die Prüfung dann wohl auch bei diesem Ereignis vornehmen willst, wirde ich dir empfehlen, die Prüfung selbst in eine Funktion oder Prozedur auszulagern, die du ann von den Ereignisprozeduren aus aufrufen kannst. Dann hast du den Code nur einmal.
Warum eigentlich schreibst du mal als Walter, mal als Walter mb, mal als WalterP ?
Grüße von Erich aus Kamp-Lintfort
P.S.: Ich muss nicht gleich ins Bettchen, wenn es dunkel wird :-)
Guten Abend...
05.11.2005 18:01:03
Walter
Hallo erich,
ich kann mir vorstellen das Du Du müde bist, wenn man Nachst noch Mails beantwortet.
Walter MB habe ich direkt von der Firma aus, sonst weiß ich garnicht für welche Datei ich das brauchte.
WalterP war für meinen Sohn, der heiß Philipp.
Sonst gibt es keine kürzel von mir.
Das wo ich schon im Forum war, war eigentlich das Wichtigste da konnte ich nicht sortieren und hatte festgestellt das das Datum, wonach ich sortierte, Falsch von der Textbox aus in die Mappe geschrieben wurde, als Text.
Das habe ich jetzt geändert und damit festgestellt das die Warnung auch Falsch war, ist ja jetzt i.o. und ich bin zufrieden.
Wollte ja nur noch ob man in der Textbox bleiben kann um so erst weiterzugehen, wenn man
das RICHTIGE Datum geschrieben hat, nun ja wenn das nicht geht ist auch nicht schlimm.
Gruß Walter
Neine nei..
05.11.2005 20:02:24
Walter
Hallo Erich,
du must schon lesen, mein Problem war doch das Datum nicht das Zahlenformat !
Gruß Walter
Ich MUSS ? na ja... (o.T. - alles ist gesagt)
05.11.2005 20:55:15
Erich
Du MUST nicht aber...bitte lesen
05.11.2005 21:08:38
Walter
Hallo Erich,
ich habe mich für DEINE Aktivitäten zu bedanken, wenn muß geschrieben habe, so
war das nicht negativ gemeint!
Ich hatte das Datumsformat was Du mir geregelt hast !
Danke nochmals,
gruß Walter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige