从CVS文件复制时,VBA会更改日期格式

时间:2017-01-17 05:18:10

标签: vba excel-vba excel

我有一个csv文件,它基本上有一个日期格式为澳大利亚日期格式的列:

4/10/2016
15/03/2017

但是,在使用以下代码将其复制并粘贴到另一个工作簿时:

srcBook.Sheets(tabf).Range("B1:AD10000").Copy
Workbooks(thisworkbook).Activate
Sheets("raw Data").Range("A2").Select
ActiveSheet.Paste

对于某些条目,月/日被换成美国格式并成为

10/04/2016
15/03/2017

我在澳大利亚的windows区域。是否有可能解决这种意外行为?

4 个答案:

答案 0 :(得分:2)

解决此问题的方法总是打开并保存CSV文件,并将 Local 属性设置为 True

当您打开CSV文件时,您可以这样做:

Workbooks.Open "path & filename.csv", Local:=True

保存后,您可以执行以下操作:

ActiveWorkbook.SaveAs Filename:="path & filename.csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True

始终在末尾添加,本地:= True

答案 1 :(得分:1)

尝试以下代码:

' copy >> paste in 1 line
srcBook.Sheets(tabf).Range("B1:AD10000").Copy Destination:= _
Workbooks(thisworkbook).Sheets("raw Data").Range("A2")

' convert column C to date format of "dd/mm/yyyy"
Workbooks(thisworkbook).Sheets("raw Data").Range("C:C").NumberFormat = "dd/mm/yyyy"

修改1

' try copy >> paste special
srcBook.Sheets(tabf).Range("B1:AD10000").Copy
Workbooks(ThisWorkbook).Sheets("raw Data").Range("A2").PasteSpecial xlValues

答案 2 :(得分:0)

您可以使用VBA使用.NumberFormat格式化范围。

srcBook.Sheets(tabf).Range("B1:AD10000").NumberFormat = "dd/mm/yyyy"

这似乎很奇怪,它只会更改某些条目的日期。也许目标表格具有应用于不同单元格的不同格式。如果是这种情况,请选择目标表中的单元格或列,并将它们格式化为excel中的正确日期格式。

答案 3 :(得分:0)

我发现使用CTRL-V粘贴制表符分隔的dd / mm / yy字符串不会交换日-月,而是使用VBA进行。我刚刚发现,如果您以yyyy-mm-dd字符串开头,则它不会交换day-month。我的Makro会在粘贴之前格式化单元格,这也可以。