2016-04-06 7 views
0

Ich bin mir ziemlich sicher, dass irgendwo, jemand schon geschafft, dieses Problem zu erklären, aber ich kann nicht die richtige Antwort für mich finden.vba: Zwischenablage Paste ändert Datum in US-Format

Hier ist die Situation: Aus einem Programm, das ich eine Liste in die Zwischenablage von Windows mit Werten wie dieses

Etwas Datum Zeit Etwas Etwas kopieren ...

Bla 31/03/16 02.20.22 Bla Bla

Bla 01/04/16 03.10.10 Bla Bla

Dann wird der VBA-Code findet die letzte freie Zeile und hat

.PasteSpecial xlPasteAll 

Das Ergebnis in Excel ist

Bla 31/03/2016 20: 22,0 Bla Bla

Bla 2016.04.01 10: 10,0 Bla Bla

Und das ist nicht, was es sein sollte.

Ich versuchte .PasteSpecial Format:="Unicode-Text" mit dem gleichen Ergebnis

ich Paste:=xlValues erhalten kann nicht und so weiter zu arbeiten. (1004)

Der beste Teil ist, wenn ich mit der rechten Maustaste (oder STRG + V) das Blatt und vorbei, erscheint alles magisch mag den richtigen Weg.

Bla 2016.03.31 02.20.22 Bla Bla

Bla 2016.01.04 03.10.10 Bla Bla

Also gehe ich davon aus ich etwas sehr dumm mache und ich muss nur den VBA-Ausdruck finden, um es richtig zu machen.

Kann mir bitte jemand helfen.

+0

Nur ein kleiner Hinweis - wenn alles richtig aussieht, wenn Sie einfache Befehle ausführen - dann verwenden Sie den Makro-Recorder und bearbeiten Sie den Code damit. – Vityata

+0

Ja das war das erste, was ich getan habe! Leider war das Ergebnis dasselbe. Der Recorder gibt den Code aus: ActiveSheet.PasteSpecial Format: = "Unicode-Text", link: = Falsch, DisplayAsIcon: = Falsch, NoHTMLFormatting: = True –

+0

Wie wäre es mit ".PasteSpecial Paste: = xlPasteFormats" – Vityata

Antwort

0

Da es scheint keine einfache Antwort auf dieses spezielle Problem zu sein, schrieb ich mir selbst einen Workaround.

Diese Problemumgehung ist nur erforderlich, wenn Sie aus der Windows-Zwischenablage einfügen und Sie eine Menge verschiedener Daten haben. Excel zu übertreffen hat verschiedene Möglichkeiten.

Dim iDay As Integer 
Dim iMonth As Integer 
Dim iYear As Integer 
Dim currRow As Integer 
Dim iName As String 

'Change date to correct date because of xl bug 
currRow = 3 
iName = ThisWorkbook.Sheets("YourSheet").Cells(currRow, 4) 

Do While iName <> "" 
    If InStr(1, ThisWorkbook.Sheets("YourSheet").Cells(currRow, 2), "/", vbTextCompare) <> 0 Then 
     ThisWorkbook.Sheets("YourSheet").Cells(currRow, 2).Replace "/", "." 
    Else 
     iDay = Split(ThisWorkbook.Sheets("YourSheet").Cells(currRow, 2), ".")(1) 
     iMonth = Split(ThisWorkbook.Sheets("YourSheet").Cells(currRow, 2), ".")(0) 
     iYear = Split(ThisWorkbook.Sheets("YourSheet").Cells(currRow, 2), ".")(2) 
     ThisWorkbook.Sheets("YourSheet").Cells(currRow, 2) = DateSerial(iYear, iMonth, iDay) 
    End If 
currRow = currRow + 1 
iName = ThisWorkbook.Sheets("YourSheet").Cells(currRow, 4) 
Loop