Datum-format TT/mm/JJJJ Lesen als mm/dd/yyyy
Ich habe eine Tabelle mit einer Spalte formatiert als:
Kategorie: Datum
Typ: *dd/mm/yyyy
Standort: Großbritannien
Wenn ich lese die Daten in dieser Spalte über VBA, liest es im format mm/dd/yyyy.
Beispielsweise 10/06/2014 (10 Juni 2014) ist zu Lesen 06/10/2014 (06 Okt 2014).
Mein code: sDate = SourceSheet.Range("AB" & CurRow.Row).Value
- Kannst du bitte post code, um mit zu gehen? Dies kann helfen, lösen Ihr Problem
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe dieses Problem mit meinen Formularen auch, und die beste Methode für mich ist, formatieren Sie das Textfeld so:
Obwohl das Datum-format wird falsch in VBA, es scheint zu funktionieren den richtigen Weg Runden in Excel. Es ist seltsam, ich kann nicht erklären, warum es passiert, aber das behebt es für mich. Wann gehe ich von VBA in Excel, den ich fast immer dieses Problem, wenn der Wert gespeichert ist, als ein Datum.
Betrachten:
Diese Frage von mir - .NumberFormat manchmal gibt falschen Wert mit Datum und Uhrzeit - gibt einige Hintergrundinformationen, die helfen können.
Ich zum ersten mal mit diesem VBA-Fehler vor vielen Jahren und es ist schlimmer als es scheint. Ich habe bemerkt, dass viele - aber nicht alle - Daten in ein Arbeitsblatt, das hatte ich seit der Aktualisierung für ein Jahr falsch waren. Es dauerte eine lange Zeit, um das problem zu diagnostizieren. Jene Daten, die interpretiert werden könnte, die als middle-endian-Termine verdorben worden, aber jene, die nicht interpretiert werden als middle-endian-Daten waren unverändert. So 12/06/2014 werden 6 Dezember aber 13/06/2014 bleiben wird 13 Juni. Wenn 13/06/2014 abgelehnt worden war, als ein ungültiges Datum oder Links als string, hätte ich entdeckte den Fehler sofort. Die doppelte Auslegung, so dass jedes Datum importiert wurde, als ein date - den falschen Zeitpunkt, aber immer noch ein Datum - gewährleistet ich habe nicht bemerkt, erst viel später Maximierung der Kosten der Korrektur für den Fehler.
Excel enthält Datums-und Zeitangaben als zahlen. "17. Juni 2014" findet wie 41807 und "1. Januar 1900" gehalten wird, als 1. In beiden Fällen, der Wert ist die Anzahl der Tage seit 31. Dezember 1899. Mal als gehalten wie ein Bruchteil:
So 06:00, 12:00 Uhr und 18:00 Uhr statt 0,25, 0,5 und 0,75.
Dieser Fehler tritt auf, wenn die übertragung eines Datums beinhaltet eine Konvertierung in und aus string-format. Ich habe nicht vor, einen einzigen Fall, in dem die Konvertierung von date in string ist falsch gewesen. Es ist die Konvertierung von string zu Datum, das auf Sie trifft dieser bug.
Kann ich sehen, dass SilverShotBee Lösung vermeiden Sie die Fehler, aber es würde nicht Appell an mich. Ich nicht mehr verwenden, keine zweideutigen Datumsangaben immer.
Einer Wahl ist der transfer der Wert als Zahl. Wenn Zelle A3 enthält das Datum und die Uhrzeit "17. Juni 2014 9:00" dann
CDbl(Range("A3").Value)
gibt 41807.375. Wenn Sie speichern diese Nummer in eine Zelle, die Sie benötigen, um das NumberFormat der Zelle, um das Datum in das format Ihrer Wahl, aber das könnte eine gute Sache sein.Wenn ich im Begriff waren, zu verwenden, middle-endian-dates, ich wäre explizit. #13/06/2014# wird immer interpretiert, als middle-endian.
Ich bevorzuge eindeutige Zeichenfolgen. "2014-06-13" oder "13. Juni 2014" nicht fehlinterpretiert durch VBA oder durch einen menschlichen Leser.
Haben, kommen Sie einfach gegen dieses Problem! Lesen von Datensätzen aus einer .csv und speichern in eine .xls
Fand ich folgende Sequenz arbeitet, zu überwinden, die fehlinterpretiert Termine:
Datum ist im original-format
Fand ich das Thema unglaublich Komplex und bemühte sich, es so einfach wie möglich, aber in der Tat Links ein paar wichtige details aus! Entschuldigung. Hier ist eine ausführlichere version von dem, was ich gefunden habe:
Zunächst sollte ich erklären, ich war zu Lesen, Termine (und andere Felder) aus .csv und speichern Sie zurück in eine .xls
Bin ich auf Office 2002 läuft auf Windows/7
Mit 2 Beispiel-Termine: 27/4/2015 und 7/5/2015 in dd/mm/yyyy format-string (aus der csv -)
Was ich gefunden habe war:
Lesen der 27/4/2015 text Feld Datum aus csv in eine variable als STRING dimensioniert und Speicherung in eine xls-Feld im dd/mm/yyyy Datumsformat produziert eine Zelle, liest 27/4/2015 aber die Umwandlung in eine Zelle formatiert als Zahl produziert auch 27/4/2015. 7/5/2015 auf der anderen Seite erzeugt einen string, der liest 7/5/2015 und konvertieren es in eine Zelle formatiert als Zahl erzeugt 42131.
Lesen der 27/4/2015 text Feld Datum aus csv in eine nicht bemaßte variable und speichern in eine xls-Feld im dd/mm/yyyy Datumsformat produziert eine Zelle, liest 27/4/2015 aber die Umwandlung in eine Zelle formatiert als Zahl produziert auch 27/4/2015 während 7/5/2015 liest 5/7/2015 und konvertieren es in eine Zelle formatiert als Zahl erzeugt 42190.
Lesen der 27/4/2015 text Feld Datum aus csv in eine variable dimensioniert DATUM und die Speicherung in eine xls-Feld im dd/mm/yyyy Datumsformat produziert eine Zelle, liest 27/4/2015 und konvertieren es in eine Zelle formatiert als Zahl erzeugt 42121. 7/5/2015 auf der anderen Seite erzeugt einen string, der liest 5/7/2015 und konvertieren es in eine Zelle formatiert als Zahl erzeugt 42190.
Den ersten 3 Szenarien oben daher nicht produzieren die gewünschten Ergebnisse für alle Datumsangaben.
Um dies zu beheben ich Tue das folgende:
Zelle verwendet wird, speichert das Datum zunächst formatiert ALLGEMEINEN und das ultimative Ziel-die Zellen formatiert als DATUM (TT/mm/JJJJ).
Ich habe nicht genug Gehirnzellen übrig um vollständig zu erklären, was passiert, um die Daten während dieses Prozesses, aber es funktioniert für mich, und natürlich ist die Wahl des target-Zellen ist völlig zufällig in den obigen code-block.
War das problem VBA war das öffnen der csv mit der Rückseite Termine für einstellige Tage.
Diese Weise öffnen Sie die Arbeitsmappe gearbeitet, das gleiche wie wenn ich es manuell so hatte die richtigen Datumsangaben in TT/mm/JJJJ format. Dann kopiert über richtig: