Zellen mit Datum Formatieren

Guten Morgen,

ich habe eine Liste mit Datümern, die ich gerne formatieren möchte.

f.E.: dd.mm.yyy.

ich erhalte aber bei jedem Programdurchlauf entweder dd.mm.yyy oder mm/dd/yyy. oder gemischt, also beides. Aber jedesmal anders, offensichtlich je nach Gusto des Compilers.

Wer weis Rat?

bis später…

Nikodemo

Hallo,
Format(*Datum als String oder Date*, „DD.MM.YYYY“)
Funktion gibt einen String zurück, falls du ein Date Typ brauchst einfach wieder mit Cdate() casten.

MfG Dominik

Danke, Krampe.

Ich habe folgendes gebastelt:
Selection.NumberFormat = „DD.MM.YY; @“
(Hab ich per Macro aufgezeichnet und so in meinen Code eingefügt)
Genau das aber funktioniert so, wie ich es beschrieben habe.

Weißt du vielleicht noch mehr?

Es grüßt dich

Nikodemo

Hi,
also das sollte funktioneren:

Columns("A:A").Select
Selection.NumberFormat = "dd.mm.yyyy"

Was macht denn dein Programm bzw. was hast du überhaupt vor?
Wenn du mal deine Code postest lässt sich das bestimmt schon beim schreiben in die Zellen formatieren.

MfG krampe

Grüezi NikoDemo

Ich habe folgendes gebastelt:
Selection.NumberFormat = „DD.MM.YY; @“
(Hab ich per Macro aufgezeichnet und so in meinen Code
eingefügt)

…interessant…:wink:

Wie hast Du es fertig gebracht, dass die Formatstrings in VBA in Grossbuchstaben stehen und mit einem Punkt getrennt sind?
Hast Du spezielle Regionseinstellungen im Betriebssystem?

Wenn ich das Ganze aufzeichne kommt folgendes dabei heraus, was dann auch klappt:

Selection.NumberFormat = „dd/mm/yyyy;@“

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Also,bei mir schaut das so aus:
580 Range(Cells(LCAUS_FIRST + 1, 2), Cells(LCAUS_LAST, 2)).Select
590 Selection.NumberFormat = "dd/mm/yy; @ "
600 With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
630 With Selection.Font
.Bold = False
.Size = SCHRIFT
650 End With
660 End With

geht aber eben nicht.

Hat so ein Compiler eine Eigenleben?

Gruß ans Matterhorn

Nikodemo

Grüezi NikoDemo

Also,bei mir schaut das so aus:

Vor oder nach einer Korrektur augrund der Antworten hier?

580 Range(Cells(LCAUS_FIRST + 1, 2), Cells(LCAUS_LAST,
2)).Select
590 Selection.NumberFormat = "dd/mm/yy; @ "

…denn deine beiden ersten Beiträge zeigen ein jeweils unterschiedliches Format.

Wie sehen deine Daten denn vor dem Durchlaufen des Codes aus?
Stehen da bereits Datümer als Datum formatiert drin?

Kann es sein, dass einige als Text vorliegen und daher auch beim Umformatieren ihre Darstellung nicht ändern?

Das GAnze kannst Du übrigens auch sehr elegant ohne .Select erreichen (alles in einer Code-Zeile natürlich):

Range(Cells(LCAUS_FIRST + 1, 2), Cells(LCAUS_LAST,:2)).NumberFormat = "dd/mm/yy; @ "

Hat so ein Compiler eine Eigenleben?

Kaum, der ist dumm wie Bohnenstroh und macht exakt das was ihm vorgegeben wird… :wink:

Gruß ans Matterhorn

So weit im Süden bin ich zwar nicht, Danke aber dennoch :smile:

Gruezi, Thomas

den ersten Code habe ich per Gedächnisprotokoll abgeschrieben, den zweiten hab ich `rüberkopiert.

bevor wir aber weitermachen: Wie kann ich feststellen, wie eine Zelle formatiert ist? Ich glaube nähmlich, daß darin ein Grund liegen könnte.

Es schaut so aus:
Ich hab ein userfm, mit dem ich Haushaltsausgaben in eine Liste (1) eintrage. in der Userfm ist eine Listbox mit Datümern, die ich per Vorgabe (RowSource) aus einer anderen Liste hole. Die Datümer darin klicke ich dann wiederum in meine Liste (1).

Ich glaube, das da schon der Fehler liegt.

Also dann die Rigi

Grüße

Nikodemo

Grüezi NikoDemo

den ersten Code habe ich per Gedächnisprotokoll abgeschrieben,
den zweiten hab ich `rüberkopiert.

Ja, sowas hatte ich mir schon fast gedacht.
Ich verlasse mich hier lieber nicht auf mein Gedächtnisprotokoll - VBA ist da einfach zu penibel.

bevor wir aber weitermachen: Wie kann ich feststellen, wie
eine Zelle formatiert ist? Ich glaube nähmlich, daß darin ein
Grund liegen könnte.

Es schaut so aus:
Ich hab ein userfm, mit dem ich Haushaltsausgaben in eine
Liste (1) eintrage. in der Userfm ist eine Listbox mit
Datümern, die ich per Vorgabe (RowSource) aus einer anderen
Liste hole. Die Datümer darin klicke ich dann wiederum in
meine Liste (1).

Ich glaube, das da schon der Fehler liegt.

Ja, denn in der Listbox stehen die Datumsangaben mit ziemlicher Sicherheit als Text und werden beim übertragen an die Zellen dann dort auch so eingetragen.
Verwende daher an dieser Stelle CDate() um die Datümer auch wirklich als solche an die Zellen zu übergeben.

Wenn Du dabei Unterstützung benötigst, dann lege den Code offen mit dem Du die Datümer in die Zellen schreibst.

Also dann die Rigi

Schon besser, aber leider auch nicht am Vierwaldstädtersee :smile:
…gleich hinter den Jura-Hügeln ists besser.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hi, Thomas,

hie mein Code im im Userform:

Private Sub COMMANDBUTTON1_CLICK() ’ USRFM001
Dim DATUM As Date, WERT As Double, TEXT As String
Dim KATEGORIE As String, SUBKATEGORIE As String, ZUORDNUNG As String
Dim TRANSFERZEILE As Integer, ZEILEKOPIE As Integer
Dim ERSTEZEILE As Integer, LETZTEZEILE As Integer
Dim OFFSET As Integer, LISTENENDE As Integer
Dim ZEILE As Integer, SPALTE As Integer
Dim ANZEINTRÄGE As Integer
Dim BLATTNUMMER As Integer, ZEILENANZEIGE As Integer
Dim T1 As Integer, T2 As Integer, T3 As Integer

’ ZUWEISUNGEN
T1 = EZ: T2 = LZ: T3 = AZ

’ ******************************************************************************************
’ BLOCK 1 DATUMSAUSGABE
’ EINTRAG DATUM VON PRIMÄRLISTE
30 Cells(LZ, 2).Value = ListBox1.Value
If Cells(LZ, 2).Value = „“ Then GoTo 880
'FORMAT AUSGABELISTE SPALTE DATUM
270 Range(Cells(EZ, 2), Cells(LZ, 2)).Select
280 Selection.NumberFormat = „DD/MM/YY“
290 With Selection
300 .HorizontalAlignment = xlCenter
310 .VerticalAlignment = xlCenter
320 End With
>>

Gruß vom Nockerberg!

Nikodemo

Grüezi NikoDemo

hier mein Code im im Userform:

Private Sub COMMANDBUTTON1_CLICK() ’ USRFM001
Dim DATUM As Date, WERT As Double, TEXT As String
Dim KATEGORIE As String, SUBKATEGORIE As String,
ZUORDNUNG As String
Dim TRANSFERZEILE As Integer, ZEILEKOPIE As Integer
Dim ERSTEZEILE As Integer, LETZTEZEILE As Integer
Dim OFFSET As Integer, LISTENENDE As Integer
Dim ZEILE As Integer, SPALTE As Integer
Dim ANZEINTRÄGE As Integer
Dim BLATTNUMMER As Integer, ZEILENANZEIGE As Integer
Dim T1 As Integer, T2 As Integer, T3 As Integer

Wenn Du mal mehr als 32.767 Zeilen hast wird der Code nicht mehr rennen, weil Integer nicht grösser als dieser Wert sein kann.
‚Long‘ wäre dann hier die besser Wahl als Datentyp.

30 Cells(LZ, 2).Value = ListBox1.Value

Hier solltest Du eben mit CDate() Arbeiten:

Cells(LZ, 2).Value = CDate(ListBox1.Value)

If Cells(LZ, 2).Value = „“ Then GoTo 880

Wenn Du die Zellen im Tabellenblatt dann im Voraus entsprechend formatierst kannst Du auch auf diesen Teil dann vermutlich verzichten.

'FORMAT AUSGABELISTE SPALTE DATUM
270 Range(Cells(EZ, 2), Cells(LZ, 2)).Select
280 Selection.NumberFormat = „DD/MM/YY“
290 With Selection
300 .HorizontalAlignment = xlCenter
310 .VerticalAlignment = xlCenter
320 End With

BTW:
Warum arbeitest Du mit Zeilennummern?
IMO erschwert das die Programmierung doch etwas.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -