Excel-VBA: Daten anzeigen als text, obwohl Datumsformat eingestellt ist
Excel 2010 Pro.
Bin ich mit einer seltsamen Formatierung problem.
Es ist OK arbeitet in Amerika, aber nicht, nachdem ich den code ausführen in österreich.
In österreich ist, wird es ignoriert von Datum und Zeit Formatierung. Ich kann es nicht ändern, nach, dass, auch manuell.
Sehen, wie wenn ich versuchen, verschiedene Formate, die Probe an der Spitze ist nicht zu ändern?
Es ist wichtig für die Zelle mit dem Wert für das gesamte Datum und Uhrzeit, sondern auch, um die gewünschten Uhrzeit-und Datumsformate.
Aktualisiert 14Nov13: Das problem ist beschrieben, auf anderen websites mit der Idee, dass das Datum irgendwie erhält "stecken als text" und können nicht neu formatiert werden, um nichts anderes. Ein Vorschlag war, etwas zu tun, mathematischen, um die Zelle zu zwingen, es zurück zu nicht-text. (Idee: die Reichweite.value = cdate(range.Wert) + 0) ich schaute genau auf meine Zelle, in österreich und bemerkt, dass es zwei Leerzeichen zwischen Datum und Zeit wie 14.11.2013 15:22:19. In einem Fall entfernte ich einen der Räume, und schnappte es in das format, das ich wollte (14-NOV-13). Ich war jedoch nicht in der Lage, Sie zu wiederholen, und haben, um herauszufinden, wie etwas zu tun, programmatisch. Ich bin nicht sicher, dass die richtige Lösung noch. Es wird wahrscheinlich beinhalten Fahrradfahren durch alle Datums-Zellen nach dem einfügen ich meine variant-array, und irgendwie lösen.
BAD (österreich)
GUT (Amerika)
MEHR DETAIL:
In meiner Anwendung Schreibe ich ein Datum, um zwei Zellen über ein array, dann formatieren Sie Sie mit einem von zwei benutzerdefinierten Datums-Formate. Die Zelle die Formatierung ist korrekt, wenn ich es prüfen. Wenn ich mir das Arbeitsblatt in Amerika, ist es richtig wie:
- A1 zeigt 01-DEC-13 ' Englisch
- B2 zeigt 15:23
Dann kopiere ich die XLSM zu einem server in österreich, und öffnen Sie es. Es sieht richtig.
- A1 zeigt 01-DEZ-13 ' deutschen
- B1 zeigt 15:23
Dann Lauf ich meinen code schreibt die neuen Daten in diese Felder und Formate. Das vermasselt, was ich sehe, in österreich, aber nicht in Amerika.
- A1 zeigt 01.12.2013 15:23 ' Richtigen Wert, Falsches format
- B1 zeigt 01.12.2013 15:23 ' Richtigen Wert, Falsches format
Ich ausgetestet, bis ich den Abschnitt, der das problem verursacht hat, die ist, wenn ich Schreibe die Daten auf dem Arbeitsblatt aus einem array. Beim Debuggen kann ich sehen, dass ich beim kopieren der array in der alle Formatierungen verloren. Das ist OK.
Set Destination = myWS.Range("A" & lFirstRow)
Destination.Resize(UBound(arrIn, 1), UBound(arrIn, 2)) = arrIn
Dann Lauf ich eine routine, die formatiert die Gegend.
If not bFormatWorksheet(myWS) then err.Raise glHandled_Error
In dieser routine, ich versuche eine von zwei Möglichkeiten, um das problem zu beheben. Zuerst habe ich versucht das kopieren der von mir gewünschten Formate aus einer versteckten Vorlage.
myWS.Rows(lFirstRow & ":" & lLastRow).ClearFormats
wksTemplate.Rows(giHEADER_ROW + 1).Copy
myWS.Rows(lFirstRow & ":" & lLastRow).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Auf meiner amerikanischen version auf, so ergibt sich korrekt formatierte Zellen. Zum Beispiel
- A1.Wert = 12/5/2013 05:00:45
- B1.Wert = 12/5/2013 05:00:45
- A1 zeigt, 05-DEC-13 ' DD-MMM-YY Richtigen
- B1 zeigt 05:00 ' im Format HH:MM Korrekt
Wieder, es sieht OK, wenn ich öffnen Sie das Dokument, in österreich, aber nicht, nachdem ich ausführen, update-code.
Nachdem ich den update code in österreich sehe ich dieses:
- A1.Wert = 12/5/2013 05:00:45
- B1.Wert = 12/5/2013 05:00:45
- A1 zeigt = 12/5/2013 05:00:45
- B1 zeigt = 12/5/2013 05:00:45
und wenn ich die Option NumberFormat...
- ?Range("A1").NumberFormat
- dd-mmm-yy
- ?Range("B2").NumberFormat
- hh:mm
und wenn ich mit der rechten klicken Sie auf jede Zelle zu überprüfen-format, das ich sehen...
- A1 format TT-MMM-JJ ' Richtigen für Tag, Monat, Jahr
- B1 format hh:mm " Richtig
Da das nicht funktionierte, ging ich in und explizit jedes mal neu formatiert Zelle in eine Schleife wie diese:
for i = lFirst to lLast
myWS.Range("A" & i).numberformat = "DD-MMM-YY"
myWSRange("B" & i).numberformat = "HH:MM"
next i
Diese nicht helfen.
Ideen?
Dank
Shari
- Wie sind Sie mit dem Auffüllen
arrIn
- Ich bin mir ziemlich sicher, dass die Datum-Zeit-Formate setzen auf das system
Locale
Einstellung. Nicht österreicher verwenden in der Regel.
statt/
zu begrenzen Termine? Das könnte es erklären. Betrachten Sie das schreiben eines string-literal, wenn Sie wollen, zu erhalten-format, hat der user die Locale-Einstellung. - arrIn ist bevölkert von code. Ich lese in einem Datenbereich aus dem Arbeitsblatt. Dann habe ich es verändern, ändern, neu ordnen, und bauen meine endgültige Ergebnisse in einem neuen array. Dann Schreibe ich das array in mein Arbeitsblatt und formatieren Sie jede Zelle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Endlich fand ich dies heraus. Nach Stunden des Lesens im internet, bekam ich einen Hinweis, der führte mich zu dieser Lösung. Es ist eine Art von voodoo und macht nicht viel Sinn, aber es löste mein problem.
Am Anfang meiner Formatierung routine kopiere ich eine formatierte Zeile aus meinem template. Das funktionierte gut, während des Aufenthaltes in Amerika, aber nicht wie beschrieben in österreich.
Ich habe dann Hinzugefügt, Datum Neuformatierung zum Ende meines formatieren routine, wie unten gezeigt. Dies löste das problem.
Ich würde nicht wollen, zu sagen, für bestimmte, dass es eine VBA-Lösung, wie es könnte einfach sein, eine Lokalisation Problem mit der software... aber vielleicht kann man das Problem beheben, indem Sie explizit Strippen den unerwünschten Teil der Datum/Zeit-aus jeder Zelle, bevor Sie ihn formatieren. So etwas wie
Könnte dies tatsächlich nicht behoben die Formatierung und kann in der Tat, verursachen die Felder zu berichten, schlechte information, wenn Sie im falschen format (z.B. "12/5/2013 00:00:00" in A1 und "12/30/1899 zurück 05:00:45' B1), aber ich würde es versuchen und sehen, was passiert. Könnten Sie ignorieren wollen, formatieren Sie diese als Zahl alle zusammen und verlassen es als formatierten string. Dies ist natürlich Scharniere auf die verstehen, die keinen anderen code erfordert, daß die Zeit bewahrt in Spalte A und das Datum hingegen befindet sich in der Spalte B. Wenn es ist, dann ist das keine richtige Lösung.