Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1436to1440
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

Datumsformat abfragen

Datumsformat abfragen
16.07.2015 14:14:44
Peter
Hallo zusammen,
ich habe folgendes Problem:
Ich möchte, dass Benutzer in eine Zelle das Datum nur im Format "dd.mm." eintragen können. Ansonsten soll eine Fehlmeldung kommen.
Sub Datumsformaprüfung()
If ActiveCell.NumberFormat = "dd.mm." Then
MsgBox "alles ok"
Else
MsgBox "nicht ok"
End If
End Sub

So sieht das ganze im Moment aus, leider bekomme ich immer die MsgBox "nicht ok", auch wenn das Datum richtig eingegeben wird.
Vielen Dank im Voraus!

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Versuch "TT.MM" owt
16.07.2015 14:23:35
Raphael

AW: Versuch "TT.MM" owt
16.07.2015 14:35:34
Rudi
Hallo,
If activecell.Text Like "##.##." Then
Gruß
Rudi

AW: Datumsformat abfragen
16.07.2015 14:31:14
Peter
Danke Raphael, leider funktioniert das auch nicht.

Siehe Rudis AW, ...
16.07.2015 15:34:03
Luc:-?
…Peter,
denn es wird wohl so sein, dass die Zelle selbst nicht als TT.MM. formatiert ist. Dann kann auch das Prüfen des ZellFormats nichts bringen, denn bei Standard ergäbe das auch bei richtiger Eingabe die falsche MsgBox-AW. Die Eingabe, nicht das ZellFormat, muss geprüft wdn und das kann man übrigens auch mit DatenGültigkeit (ganz ohne VBA!) machen.
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Siehe Rudis AW, ...
16.07.2015 16:02:04
Peter
Vielen Dank euch schonmal!
Vielleicht sollte ich noch hinzufügen, dass es mir eigentlich darum geht, dass der Benutzer am Ende einen Punkt hinter den Monat schreibt.
Ob er den Tag als 1. oder 01. eingibt ist egal, wichtig ist der Punkt hinter dem Monat.
Darum wollte ich auf "DD.MM." prüfen, aber eventuell ist das dann ja gar nicht nötig?
Der Punkt ist wichtig, da das Datum (sprich Tag & Monat) der Zelle entnommen wird und anschließend eine Jahreszahl angehängt wird. Dafür muss eben der Punkt als Trennung hinter den Monat und das soll geprüft werden und ggf automatisch angepasst werden...:)

Anzeige
Dann frag nach dem letzten Zeichen mit ...
16.07.2015 16:06:33
Luc:-?
Right(…, 1)!
Luc :-?

AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 08:19:24
Peter
Super, das klappt jetzt. Vielen Dank Luc:-?
Leider ergibt sich daraus ein weiteres Problem, an dem ich hänge (Ich bin leider noch VBA Neuling :/):
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$5" Then
If Right(Range("F5"), 1) = "." Then
Exit Sub
Else
MsgBox "Bitte geben Sie das Datum im Format DD.MM. (Tag.Monat.) ein und vergessen Sie  _
den letzten Punkt nicht", vbInformation, "Hinweis Datumsformat"
Range("F5").Value = "?.?."
End If
End If
End Sub
Mit diesem Code funktioniert das ganze. Ich habe aber zuerst anstatt .Value = ?.?. einen clear befehl eingefügt: Range("F5").ClearContents, wodurch dann natürlich wieder der Change Befehl losging und ich in einer Endlosschleife hing. Ich habe dann versucht mit Exit Sub das ganze zu beenden, aber ich komme nicht aus der Funktion raus. Gibt es da eine Möglichkeit (ich bin sicher, dass es sie gibt :) )
Danke, peter

Anzeige
AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 09:31:18
Rudi
Hallo,
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$5" Then
On Error GoTo ERREXIT
Application.EnableEvents = False  'Ereignisverarbeitung aus
If Right(Target, 1) = "." Then
'nix passiert
Else
MsgBox "Bitte geben Sie das Datum im Format DD.MM. (Tag.Monat.) ein " _
& "und vergessen Sie den letzten Punkt nicht", _
vbInformation, "Hinweis Datumsformat"
Target.ClearContents
End If
End If
ERREXIT:
Application.EnableEvents = True
End Sub

Was ist, wenn der . hinter dem Tag fehlt?
Gruß
Rudi

AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 09:40:23
Peter
Hallo Rudi und vielen Dank,
es funktioniert jetzt genau so, wie es soll :)
Zu deiner Frage:
Der Punkt ist wichtig, da das Datum der Zelle entnommen wird und anschließend das Jahr angehängt wird.
D.h. der Zellwert 1.6. wird genommen und mit der Endung 2015 in eine neue Zelle geschrieben.
Den Aufbau dafür siehst du auch in einem anderen Beitrag, den ich heute geschrieben habe (nennt sich: Userform für Dateneingabe). Das Datum wird entnommen und um das obenstehende Jahr ergänzt.
LG und ein schönes Wochenende,
Peter

Anzeige
AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 10:04:32
Peter
Ich habe noch eine Frage bzgl. einer Erweiterung des Codes.
Die von Rudi aufgeführte Abfrage
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$5" Then
On Error GoTo ERREXIT
Application.EnableEvents = False  'Ereignisverarbeitung aus
If Right(Target, 1) = "." Then
'nix passiert
Else
MsgBox "Bitte geben Sie das Datum im Format DD.MM. (Tag.Monat.) ein " _
& "und vergessen Sie den letzten Punkt nicht", _
vbInformation, "Hinweis Datumsformat"
Target.ClearContents
End If
End If
ERREXIT:
Application.EnableEvents = True
End Sub
soll nicht nur für die Zelle F5, sondern für mehr Zellen in verschiedenen Spalten funktionieren. Kann ich das mit einer Schleife ausführen, sodass ich den Code nicht 50x kopieren muss und die Rangebeschriftung anpassen muss?
Danke und LG, Peter

Anzeige
AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 10:08:20
Rudi
Hallo,
wo soll das denn gelten?
Beispielmappe?
Gruß
Rudi

AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 10:12:29
Peter
Hallo Rudi,
Userbild
so sieht ein Teil der Tabelle aus. Überall, wo ein Datum eingetragen werden kann, soll die Prüfung stattfinden.
Gerne kannst du dir aber auch meinen Beitrag zur Userform für Dateneingabe anschauen, denn ich überlege, ob es nich machbar ist, mit einer Eingabemaske alle Werte einzugeben und diese dann in die entpsrechende Zelle schreiben zu lassen.
Leider bin ich mir nicht sicher, wie ich das angehen soll, falls das überhaupt machbar ist.
Gruß,
Peter

Anzeige
AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 10:28:56
Rudi
Hallo,
eine Möglichkeit:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then 'nur 1 Zelle
If Cells(3, Selection.Column).MergeArea(1) = "Datum" Then
'mach was
End If
End If
End Sub

Gruß
Rudi

AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 10:53:57
Peter
Hallo Rudi,
leider werde ich daraus nicht ganz schlau.
Der Code
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$5" Then
On Error GoTo ERREXIT
Application.EnableEvents = False  'Ereignisverarbeitung aus
If Right(Target, 1) = "." Then
'nix passiert
Else
MsgBox "Bitte geben Sie das Datum im Format DD.MM. (Tag.Monat.) ein " _
& "und vergessen Sie den letzten Punkt nicht", _
vbInformation, "Hinweis Datumsformat"
Target.ClearContents
Range("F5").Select
End If
End If
ERREXIT:
Application.EnableEvents = True
End Sub
funktioniert logischerweise momentan nur für die Zelle F5.
Nun soll dies aber auch für die Zellen bis F26 und auch G5-G26 funktionieren (später dann auch noch für die weiteren Datumszellen).
Hier noch die Beispielmappe mit der kompletten Tabelle, dann wird es etwas klarer:
https://www.herber.de/bbs/user/98891.xlsx
Vielen Dank,
Peter

Anzeige
AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 11:43:15
Rudi
Hallo,
funktioniert in Zeile 5-26 in allen Spalten wo im verbundenen Bereich in Zeile 3 "Datum" steht.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Target  "" Then
Select Case Target.Row
Case 5 To 26
If Trim(Cells(3, Target.Column).MergeArea(1)) = "Datum" Then
If Right(Target, 1)  "." Then
MsgBox "Bitte geben Sie das Datum im Format DD.MM. (Tag.Monat.) ein " _
& "und vergessen Sie den letzten Punkt nicht.", _
vbInformation, "Hinweis Datumsformat"
Application.EnableEvents = False
Target = ""
Target.Select
Application.EnableEvents = True
End If
End If
End Select
End If
End If
End Sub

Gruß
Rudi

Anzeige
AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 12:59:56
Peter
Hallo Rudi,
super für die nette Antwort und den Code. Funktioniert einwandfrei!
Könntest du noch genau erleutern, was die einzelnen Schritte machen? Damit ich dazulerne und solch eine Frage beim nächsten Mal selbst beantworten kann :)
Danke und LG
Peter

AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 11:57:09
EtoPHG
Hallo Peter,
Warum nicht von Anfang an die Anforderung möglichst genau beschreiben? z.B. so:
Ich möchte den Benutzern die Möglichkeit geben in Zellen, die ein Datum des laufenden Jahres enthalten sollen die Eingabe in der verkürzten Form von Tag.Monat. (mit einem Punkt am Ende!) zu erlauben und diese automatisch durch das laufende Jahr zu ergänzen. Sie sollen aber auch ein vollständiges Datum des laufenden Jahres eingeben können Tag.Monat.Jahr
Die Zelle soll anschliessend ein gültiges Datum des laufenden Jahres enthalten.
Es soll für alle Zellen gelten, deren Zeilennummer > 3 ist und die eine Spaltenüberschrift "Datum" (u.U. verbundene Zelle!) in Zeile 2 aufweisen!
Entspricht die Eingabe nicht dem Format Tag.Monat. oder Tag.Monat.Jahr, soll eine Fehlermeldung mit einem verständlichen Hinweis erfolgen und die Eingabe gelöscht werden.

Daraus könnte man dann diesen Code konstruieren (und natürlich Testen!):
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If IsEmpty(Target) Then Exit Sub
If IsDate(Target) And Year(Target) = Year(Date) Then Exit Sub
If Target.Row > 3 Then
Application.EnableEvents = False
If Cells(2, Target.Column).MergeArea(1) = "Datum" Then
If IsDate(Target.Text & Year(Date)) Then
Application.EnableEvents = False
Target = CDate(Target & Year(Date))
Else
MsgBox "Aus der Eingabe [" & Target.Text & _
"] kann kein gültiges Datum gebildet werden!" & vbCrLf & _
"Beachten Sie das Format [DD.MM.] (inkl. Punkt am Ende!)", vbExclamation, _
"Datumsprüfung auf " & Year(Date)
Application.Undo
End If
End If
Application.EnableEvents = True
End If
End Sub
Gruess Hansueli

Anzeige
AW: Dann frag nach dem letzten Zeichen mit ...
17.07.2015 10:05:07
Rudi
Hallo,
123. wird aber auch als korrekt angesehen.
Gruß
Rudi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige