Anzeige
Archiv - Navigation
452to456
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
452to456
452to456
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datumseingabe 14022003 zum DATUM 14.02.2003 machen

Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 10:25:58
chris
Hallo,
dieses Posting steht schonmal weeeeit unten im Forum... aber niemand hat mehr auf dieses Posting geantwortet... Deswegen hole ich es jetzt mal nach oben.... In der impertinenten Hoffnung auf eure genialen Kenntnisse
Folgendes Problem: ich möchte in Zelle B2 folgendes eingeben: 14022003 und dann soll da das DATUM 14.02.2003 drinstehen (mit dem man dann auch rechnen kann usw... eben alle Datumsfunktionen nützen)
Es nützt mir nichts wenn das Datum in der Zelle daneben steht (und das ist die Schwierigkeit ;-))) ) Der Datumswert muss genau in der Zelle stehen in der ich das eingegeben habe
PS: mit 00"."##"."#### kann man die eingabe 14022003 schon so formatieren, dass dort 14.02.2003 drinsteht... aber das wird dann als Zahl interpretiert und nicht als Datum :'(
Wer mag sich daran mal den Kopf zerbrechen?????
Ansonsten Schönes Wochenende und Vielen Dank fürs Lesen bis hierhin schonma ;-)
Grüße Chris

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 10:49:12
chris
Eben den Thread hab ich ja gemeint... Aber wie gesagt... Wenn die Eingabe in Zelle A2 stattfindet muss das Ergebnis auch in Zelle A2 stehen... Das ist das Schwierige an der ganzen Sache
Grüße
chris
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:00:42
Annett
Hallo Chris
hast Du meinen Vorschlag auch gelesen?
Gruß Annett
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:06:53
chris
Ja habe ich... ist aber keine Lösung für mein Problem ... die Dame will 14022004 eingeben und nicht 14-02-2004 oder so... Ansonsten wäre es wirklich einfacher
Aber es muss doch eine möglichkeit geben.... VBA oder so... Also in JAVA würde ich einfach den String nehmen und in 3 Substrings zerlegen die ich einem Datums-Objekt im Konstruktor übergebe und schon hätte ich ein neues Datums-Objekt...
Nur leider kann ich 0 VBA ... Aber irgendeine Möglichkeit muss es doch geben dass man für bestimmte Zellen hinterlegt, dass die eingabe zerstückelt wird und dann eben daraus ein Datum gemacht wird
Vielen Dank für eure Hilfe... Ich hoffe noch auf den entscheidenden tipp
Grüße chris
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:10:35
Udo
Die Dame soll 14-2-4 eingeben, das ist kürzer und führt zum selben Ergebnis.
Bequemer gehts in keinem Windowsprogramm.
Udo
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:10:46
Annett
Hallo Chris
für welchen Bereich??
Wird immer nur eine Zelle gefüllt?
Werden immer 8 Stellen eingegegben?
Darf ein Makro verwendet werden?
Gruß Annett
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:14:23
chris
Naja ich würde mal sagen für den bereich B2 bis B40 (Also quasi eine Spalte außer einer Zelle oben für Beschriftung "Datum:")
es werden immer 8 Stellen eingegeben (aber es müsste eben ohne - und ohne / funktionieren)
Wie meinst du das mit dem makro??? Also generell ja (weil anders gehts ja wohl nicht, oder???) VBA könnte man dazu nicht einsetzen und irgendein Subroutine (heißt das so???) in den einzelnen Sheets hinterlegen die das ganze dann parsen würde???
Grüße Chris
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:23:07
chris
Aber da hätten wir wieder das Problem, dass ich in die Zelle B2 eingebe und das Datum steht in Zelle B3 ... Es soll aber ja in der gleichen Zelle stehen in der die Eingabe passiert ist :'(

Grüße
chris
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:23:01
Annett
Hallo Chris
mal ohne Prüfung der Eingabe.
In VBA unter der Tabelle

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 2 And Target.Row > 1 And Target.Row < 41 Then
Application.EnableEvents = False
Target = CDate(Left(Target, 2) & "." & Mid(Target, 3, 2) & "." & Right(Target, 4))
Application.EnableEvents = True
End If
End Sub

Gruß Annett
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:29:37
chris
Wow... vielen dank... das liest sich plausibel..... wie wende ich das an...
Welches Format muss die Spalte B haben????? Standard??? Text??? Benutzerdefiniert 00"."00"."0000 vielleicht sogar Datum???
Die Subroutine muss ich einfach im VB Editor unter Tabellenblatt einfügen
Vielen vielen Dank
Chris
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:31:44
Annett
Hallo Chris
an dem Bereich in der Tabelle mußt Du nichts machen. Das läuft automatisch. Ich würde also Standard lassen.
Gruß Annett
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:33:51
chris
OK... dann funktioniert irgendwas nicht... wenn ich in Spalte B nun 02022002 eingebe steht da einfach 2022002 (also Excel interpretiert das als zahl und schneidet die erste 0 sogar noch ab)
was hab ich denn da falsch gemacht????
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:38:36
Annett
Hallo Chris
das hatte ich nicht getestet.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Wert As String
If Target.Column = 2 And Target.Row > 1 And Target.Row < 41 Then
Application.EnableEvents = False
Wert = Target.Value
If Len(Wert) < 8 Then Wert = "0" & Wert
Target = CDate(Left(Wert, 2) & "." & Mid(Wert, 3, 2) & "." & Right(Wert, 4))
Application.EnableEvents = True
End If
End Sub

Gruß Annett
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 11:46:38
chris
und das funktioniert bei dir????? Bei mir stehen da einfach die Zahlen drin, die vorher auch schon drinstanden...
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 12:20:48
Annett
Hallo Chris
genau die Zahlen. Ich habe es mit 02022004 getestet.
Gruß Annett
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 12:18:23
chris
Ok... nun funktioniert es Ansatzweise
ich gebe in B3 12122004 ein -- es kommt 12.12.2004
ich gebe in B4 13122004 ein -- es kommt 13.12.2004
ich gebe in B5 14122004 ein -- es kommt 14.12.2004
dann in c5 =B5-B4 (formatiert als Zahl) -- es kommt 1,00
wenn ich jetzt aber in B6 15052004 eingebe kommt eine Fehlermeldung mit Laufzeitfehler '6' Überlauf........................ Was soll mir das sagen????
Grüße
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 12:33:05
Annett
Hallo Chris

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Wert As String
If Target.Column = 2 And Target.Row > 1 And Target.Row < 41 Then
Wert = Target.Formula
If Wert = "" Then Exit Sub
Application.EnableEvents = False
If Len(Wert) < 8 Then Wert = "0" & Wert
Target = CDate(Left(Wert, 2) & "." & Mid(Wert, 3, 2) & "." & Right(Wert, 4))
Application.EnableEvents = True
End If
End Sub

Gruß Annett
Anzeige
AW: Datumseingabe 14022003 zum DATUM 14.02.2003 machen
10.07.2004 13:11:29
chris
danke... es funktioniert ;-)))
Merci beaucoup
was ist hiermit 00"."00"."0000
10.07.2004 11:18:57
th.heinrich
hi Chris,
rechnen laesst sich damit aber nicht.
gruss thomas
ps. vertippen darf sich die DAME auch nicht ;-))
AW: Datum TMMJJ, TTMMJJ, TMMJJJJ, TTMMJJJJ per VB
10.07.2004 14:54:28
FP
Hallo Chris,
ne nette kleine Variante, die alle Eingaben in den im Betreff genannten Formaten in ein Datum umwandelt:
Option Explicit
Const intCDate As Integer = 2 'Spalte mit Datumsumwandlung
Const lngRDate As Long = 40 'letzte Zeile mit Datums-Umwandlung

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target(1)
If .Column = intCDate And .Row <= lngRDate Then
Application.EnableEvents = False
.NumberFormat = "0"
If .Value > 10099 And .Value < 31130000 Then
.FormulaLocal = WorksheetFunction.Text(.Value, _
"00-00-00" & IIf(1 + .Value > 311299, "00", ""))
.NumberFormatLocal = "TT.MM.JJJJ"
If Target.Cells.Count > 1 And Target.Columns.Count = 1 Then
Target.Value = .Value
Target.NumberFormat = .NumberFormat
End If
End If
Application.EnableEvents = True
End If
End With
End Sub

Servus aus dem Salzkammergut
Franz
Anzeige
AW: Datum TMMJJ, TTMMJJ, TMMJJJJ, TTMMJJJJ per VB
10.07.2004 15:23:01
chris
Das ist wirklich nicht übel... Respect ;-)
Grüße
AW: Datum TMMJJ, TTMMJJ, TMMJJJJ, TTMMJJJJ per VB
10.07.2004 17:20:57
FP
Hallo chris,
hier noch eine kleine Korrektur (Überprüfung der Eingabe erweitert)
Ereigniscode:
Option Explicit
Const intCDate As Integer = 2 'Spalte mit Datumsumwandlung
Const lngRDate As Long = 40 'letzte Zeile mit Datums-Umwandlung

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target(1)
If .Column = intCDate And .Row <= lngRDate Then
If CheckDate(.Formula) = True Then
Application.EnableEvents = False
.NumberFormat = "0"
.FormulaLocal = WorksheetFunction.Text(.Value, _
"00-00-00" & IIf(1 + .Value > 311299, "00", ""))
.NumberFormatLocal = "TT.MM.JJJJ"
.Interior.ColorIndex = .Offset(1).Interior.ColorIndex
If Target.Cells.Count > 1 And Target.Columns.Count = 1 Then .Copy Target
Application.EnableEvents = True
Else
.Interior.ColorIndex = 3
.Activate
End If
End If
End With
End Sub

Code für Modul:
Option Explicit
' prüft ob Zahl einem Datum im Format TMMJJ, TTMMJJ, TMMJJJJ, TTMMJJJJ entspricht
Public Function CheckDate(zahl As Variant) As Boolean
Dim bytUltimo As Byte 'Ultimo
Dim bytDay As Byte 'Tag
Dim bytMon As Byte 'Monat
Dim intYear As Integer 'Jahr
Dim bytNC As Byte 'Korrekturfaktor Länge(n)
Dim lngDatVal As Long 'Datum als Long
Const cstrTitle As String = "Datumskontrolle: EINGABEFEHLER!"
Const cstrError1 As String = "Der Datumsteil "
Const cstrError2 As String = " enthält einen ungültigen Wert!" & vbCr & vbCr
Const cstrInputV As String = "Eingabewert:" & vbTab
lngDatVal = Val(zahl)
If lngDatVal < 10100 Then
MsgBox "In diesem Bereich darf nur eine Datumszahl eingegeben werden!", _
vbCritical + vbOKOnly, cstrTitle
Exit Function
End If
bytNC = Len(CStr(lngDatVal)) Mod 2
bytDay = Left(lngDatVal, 2 - bytNC)
bytMon = Mid(lngDatVal, 3 - bytNC, 2)
intYear = Right(lngDatVal, 2 + (Len(CStr(lngDatVal)) > 6) * -2) + 1900
If intYear < 1930 Then intYear = intYear + 100
Select Case bytMon
Case 0, 13 To 99
MsgBox cstrError1 & "Monat" & cstrError2 _
& cstrInputV & bytMon, _
vbCritical + vbOKOnly, cstrTitle
Exit Function
End Select
bytUltimo = Day(DateSerial(intYear, bytMon + 1, 0))
Select Case bytDay
Case 0, bytUltimo + 1 To 99
MsgBox cstrError1 & "Tag" & cstrError2 _
& cstrInputV & bytDay, _
vbCritical + vbOKOnly, cstrTitle
Exit Function
End Select
CheckDate = True
End Function

Probier's einfach mal...
Servus aus dem Salzkammergut
Franz
AW: Datum TMMJJ, TTMMJJ, TMMJJJJ, TTMMJJJJ per VB
11.07.2004 10:30:14
th.heinrich
hallo Franz,
habe in diesen mega-thread immer mal wieder reingeschaut, komme mit Deiner loesung leider nicht klar.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)...
steht in DieseArbeitsmappe.
die FUNCTION ist als MODUL eingefuegt.
gebe ich nun 25031955 ein sagt FUNCTION WAHR, aber bei Worksheet_Change aendert sich nichts an der DATUMSFORMATIERUNG.
gruss thomas
AW: Datum TMMJJ, TTMMJJ, TMMJJJJ, TTMMJJJJ per VB
11.07.2004 11:08:07
FP
Hallo Thomas,
Den "Worksheet_Change"-Code mußt Du natürlich in den "Ereignisbereich" des Blattes kopieren:
Klick mit rechter Maustaste auf Blattregister
Menüpunkt "Code anzeigen" auswählen
Code einfügen
nur der PrüfCode Checkdate gehört in ein Modul ...
Zusatzinfo: Die Umwandlung findet in diesem Beispiel nur im Bereich B2:B40 statt!
Servus aus dem Salzkammergut
Franz
AW: Datum TMMJJ, TTMMJJ, TMMJJJJ, TTMMJJJJ per VB
11.07.2004 11:31:41
th.heinrich
hallo Franz,
bin heute scheinbar zu frueh aus dem bett gefallen (WORKBOOK-WORKSHEET)und das mit B2:B40
Const intCDate As Integer = 2 'Spalte mit Datumsumwandlung
Const lngRDate As Long = 40 'letzte Zeile mit Datums-Umwandlung
steht in Deinem CODE sowieso drin.
danke von thomas

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige