4.6k Aufrufe
Gefragt in Tabellenkalkulation von m-o-m Mitglied (499 Punkte)
Hallo Excelgötter,

ich hab mal wieder eine Frage zu meinem Excel 2003.

Die Frage klingt im ersten Moment wie in etlichen Threads bereits behandelt, ich hab aber nicht den einen gefunden.

Ich möchte per Makro eine Datei speichern inklusive der Datums UND Uhrzeitangabe.

Hierzu soll in Zelle T1 über =jetzt() der aktuelle Wert eingetragen werden. Diesen greife ich dann mit einem anderen Makro ab.

Problem ist jetzt, dass die Zeit den Doppelpunkt enthält und somit nicht funzt. Wenn ich nun über ersetzen den Doppelpunkt durch z.B. Unterstriche ersetze erscheint eine amerikanische Datumsangabe (12/2/2009 10-19-20 AM), die ich wegen der Slash-Zeichen auch gebrauchen kann.

Ich habe schon versucht, das Format auf JJMMTT_HHMM umzuschalten, aber es kommt immer dasselbe dabei rum.

Anbei mein kläglicher Versuch eines Makros. Wo liegt der Fehler???

Sub jetzt()
Range("T1").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.NumberFormat = "yymmdd_hhmm"
Range("T1").Copy
Range("T1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("T1:T14").Select
Range("T14").Activate
Selection.Replace What:="/", Replacement:="-", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=":", Replacement:="-", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

Vorab schonmal VIELEN DANK!!!

Gruß Maik

6 Antworten

0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo Maik..

vielleicht hilft Dir der folgende Code :
Sub DatumInName()
Dim T As Variant
Dim M As Variant
Dim D As Variant
Dim H As Variant
Dim mm As Variant
M = Month(Now())
If Month(Now()) < 10 Then M = "0" & Month(Now())
D = Day(Now())
If Day(Now()) < 10 Then T = "0" & Day(Now())
H = Hour(Now())
If Hour(Now()) < 10 Then H = "0" & Hour(Now())
mm = Minute(Now())
If Minute(Now()) < 10 Then mm = "0" & Minute(Now())

T = Right(Year(Now()), 2) & M & T & "_" & H & mm
MsgBox T
End Sub


Hier wird die Zeitangabe in Einzelteile zerlegt, und nach Deiner Vorgabe wieder 'zusammenbebaut' :-)

Gruß
Kauz
0 Punkte
Beantwortet von m-o-m Mitglied (499 Punkte)
Hallo Kauz,

MAXIMUM RESPECT!!!!!!!!!!!!!!!!!!!!!!!!!

Danke, das is es.

Gruß Maik
0 Punkte
Beantwortet von
Hallo Maik,

es geht ein bisschen kürzer. Ersetze Deine Codezeile

ActiveCell.FormulaR1C1 = "=NOW()"

durch

ActiveCell.FormulaR1C1 = "=TEXT(NOW(), ""JJMMTT_hhmm"")"

oder durch

ActiveCell.FormulaR1C1 = "=TEXT(NOW(), ""TT.MM.JJJJ hh.mm"")"

bzw. durch eine Formatierung, die Deine Anforderungen exakt erfüllt und lass die ganze restliche Formatierung weg. In dem Formatstring kannst Du so ziemlich alles zusammenbauen, was Du willst, die Frage dabei ist eher, ob nachfolgende "Programme" diese Werte noch als Datum-Zeit-Angabe verstehen und verarbeiten können.

Leider hast Du nur geschrieben, dass Du den Doppelpunkt nicht gebrauchen kannst, aber welches Trennzeichen es stattdessen sein sollte, hast Du verschwiegen. Wahrscheinlich ein weiterer Irrtum:
... erscheint eine amerikanische Datumsangabe (12/2/2009 10-19-20 AM), die ich wegen der Slash-Zeichen auch [ ? ] gebrauchen kann.

MfG Charlotte
0 Punkte
Beantwortet von
Hallo Maik,

ich habe noch eine grundsätzliche Frage: Warum willst Du die Zeitangabe, die Dir =JETZT() liefert, überhaupt noch irgendwie formatieren?

1. Formatierungen im engeren Sinn ändern nur die sichtbare Darstellung eines Wertes, nicht aber den Wert selbst. Ein anderes Makro liest später sowieso nur den Wert und ist ansonsten normalerweise völlig "blind" gegenüber jeglicher Formatierung.

Eine Zelle mit der Formel =JETZT() und einer entsprechenden Datum-Zeit-Formatierung könnte ihren Wert beispielsweise so oder so ähnlich darstellen: 02.12.2009 13:32 .

Tatsächlich enthält sie aber nichts anderes als die Gleitkommazahl 40149,56448, und zwar völlig unabhängig von jeglicher Beeinflussung der Darstellung. Dabei stellt der ganzzahlige Teil 40149 die Tage und daraus abgeleitet die Wochen, Monate und Jahre dar und die Nachkommastellen 56448 stellen die Minuten und Sekunden dar. Außer dem Komma zwischen ganzzahligem und gebrochenem Anteil enthält ein Datums-Zeit-Wert also keinerlei Leer-, Trenn- oder sonstige Zeichen.

2. Andererseits gibt es auch Änderungen in der Darstellung von Werten, die gleichzeitig zu einer Veränderung des Wertes führen und somit eigentlich keine reinen Formatierungen mehr sind.

Die Funktion TEXT() bewirkt dies im allgemeinen.

Die Anwendung von TEXT() auf einen Datums-Zeit-Wert (siehe oben) führt also nicht nur dazu, dass der Wert - bei unverändertem Standard-Format der Zelle - automatisch als Text angezeigt wird, die zwecks Formatierung gegebenenfalls hinzugefügten oder weggelassenen (Trenn-)Zeichen werden tatsächlich in die Zeichenfolge eingefügt bzw. daraus entfernt! Daraus können sich Probleme bei der weiteren Verarbeitung solcher Werte ergeben, aber umgekehrt natürlich auch Vorteile.

Wenn Du also einen Datums-Zeit-Wert in T1 hauptsächlich zwecks einer späteren Verarbeitung einfügst, wozu dann die Formatierung?

MfG Charlotte
0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo...

@ Charlotte
Die Formatierung möchte er, weil das Datum Teil eines Dateinamens werden soll... so hab ich es zumindest verstanden.

Deine Variante der Formatierung ist natürlich um Längen besser als meine....
werde ich mir auch mal merken. :-)

Wer den kurzen Weg nicht kennt, muß halt auf einem längeren Weg das Ziel finden. :-)

Gruß
Kauz
0 Punkte
Beantwortet von m-o-m Mitglied (499 Punkte)
Hallo Charlotte,
hallo Kauz,

vielen Dank für die Unterstüzung.

Ja ich brauch das Datum nebst Zeit als Unterscheidungsmerkmal in den Dokumentennamen.

Gruß Maik
...