2016-12-20 9 views
0

Ich habe Probleme, ein Datum von einer Datei in eine andere zu kopieren und das Format (TT/MM/JJJJ) beizubehalten, während VBA verwendet wird. Eine direkte Kopie führt dazu, dass die Datumsangaben in das US-Datumsformat konvertiert werden und sich in mm/dd/yyyy ändern und die Datumsangaben (dd> 12) sich in eine Zeichenfolge ändern. Ich habe versucht, das Datum zu einer Zahl zuerst zu ändern und dann kopieren/einfügen (mit dem Plan zurück zu Datumsformat zu gehen, sobald die Kopie abgeschlossen war), aber dies ändert nur Format für die Daten mit dd < = 12, die Daten mit dd > 12 kommen immer noch als String-Format vor. Auch die Daten, die erfolgreich auf Zahlen ändern, scheinen auf US-Format zu ändern, dann Zahlenformat, so dass ich mit dem falschen Datum sowieso die seltsame Sache durchläuft diese Schritte manuell (außerhalb von VBA) funktioniert gut, kann ich alle bekommen die Daten in das Format, das ich möchte, und das US-Format erscheint nie. Hier ist der Code I verwendet haben:Datum in Zahlenformat konvertieren vba

Sheets("Import").Select 
PathName = Range("B2").Value 
Filename = Range("B3").Value 
TabName = Range("B4").Value 
ControlFile = ActiveWorkbook.Name 
Workbooks.Open Filename:=PathName & Filename 
ActiveSheet.Name = TabName 
Columns("A:A").Select 
Selection.NumberFormat = "0" 
Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206") 

Jede Hilfe oder Anregungen für Dinge wäre toll, zu versuchen. Cam

+0

Ich vermute, dass über die Zwischenablage verwenden könnte, könnte sei das Problem. Müssen Sie die Formatierung beibehalten? – Comintern

+0

nein Ich kann mit der Formatierung umgehen, sobald eingefügt, aber der Prozess ändert tatsächlich den Wert (dh in Tabelle 1 ist der Wert 42501 und nach dem Kopieren der Wert ist 42679 ... – user2301233

+0

Versuchen Sie 'Arbeitsmappen (ControlFile) .Sheets (" Import ") .Range (" A8: A206 "). Wert = Bereich (" A2: A200 "). Wert" – Comintern

Antwort

1

Ich würde einen von diesen versuchen. Ich bin verwirrt, welches Format du willst.

Workbooks.Open Filename:=PathName & Filename 
ActiveSheet.Name = TabName 
Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206") 

'Workbooks(ControlFile).Sheets("Import").Columns("A:A").NumberFormat = "dd/mm/yy;@" 

Ich bin sicher, dass eine dieser

'Workbooks(ControlFile).Sheets("Import").Columns("A:A").NumberFormat = "mm/dd/yy;@" 

funktionieren Wenn alles andere fehlschlägt nur diese nach dem Code ausführen und es jedes Format Ihrer seeking machen.

Sub Change_Date() 
Dim oCell As Range 
Dim LastRow As Long 

LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 

For Each oCell In ActiveSheet.Range("A1:A" & LastRow) 
    oCell.Value = Format(Trim(oCell.Value), "dd/mm/yyyy") 
Next oCell 


End Sub 
0

in Japan leben und mit mit seltsamen Datum Konvertierungen umgehen ich die einzige wirkliche sichere Art und Weise gelernt haben, die Formatierung der Art und Weise Sie behalten wollen, ist NumberFormatLocal zu verwenden, um die Zelle so, wie Sie es brauchen zu setzen. Ganz gleich, wie Sie das Datum in der VBA formatieren, sobald es sich in der Zelle befindet, scheint Excel die lokalen Einstellungen zu übernehmen.

Der folgende Code ist, was ich in Ihrer Situation verwenden würde, um das Format zu garantieren, das Sie wollen.

Sheets("Import").Select 
    PathName = Range("B2").Value 
    Filename = Range("B3").Value 
    TabName = Range("B4").Value 
    ControlFile = ActiveWorkbook.Name 
    Workbooks.Open Filename:=PathName & Filename 
    ActiveSheet.Name = TabName 
    Columns("A:A").Select 
    Selection.NumberFormat = "0" 
    Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206") 

    Workbooks(ControlFile).Sheets("Import").Range("A8:A206").NumberFormatLocal = "d/m/yyyy" 

Sie auch so etwas wie dies auf ein Datum 1/12/2016

Range("A8:A206").NumberFormatLocal = "dd/mmm/yyyy" 

Um Ihnen eine Ausgabe von,

12/Jan/2016 statt Jan/12/2016