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.
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.
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.
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.
Ich habe folgendes gebastelt:
Selection.NumberFormat = „DD.MM.YY; @“
(Hab ich per Macro aufgezeichnet und so in meinen Code
eingefügt)
…interessant…
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:
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
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).
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
…gleich hinter den Jura-Hügeln ists besser.
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
>>
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.