当CVS文件保存为XLSX时,VBA会更改日期格式

时间:2017-01-17 07:09:33

标签: vba excel-vba excel

我有一个csv文件,其中D列的日期输入并以澳大利亚日期格式格式化。其余数据是整数:

4/10/2016 (correctly representing 4 Oct 16)
15/03/2017 (correctly representing 15 Mar 17)

当我将此文件手动保存为xlsx时,它会正确保存日期,因此当我重新打开xlsx文件时,日期会正确显示:

value = 4/10/2016, format = 4/10/2016 (as dd/mm/yyyy)
value = 15/03/2017, format = 15/03/2017 (as dd/mm/yyyy)

但是,当我以编程方式执行相同操作时:

fileNameXLSX = "H:\20160930.xlsb"
fileNameCSV = "H:\20160930.csv"
Set srcBook = Application.Workbooks.Open(filenameCSV, ReadOnly:=True)
Application.DisplayAlerts = False
srcBook.SaveAs filename:=fileNameXLSX, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
srcBook.Close False
Set srcBook = Nothing
Application.DisplayAlerts = True

并打开文件,一些条目,月/日期被交换,在那个xlsx文件中,这些值将变为:

value = 10/4/2016, format = 10/4/2016 (still dd/mm/yyyy)
value = 15/03/2017, format = 15/03/2017 

我在澳大利亚的windows区域。我该如何解决这个问题,以便我的VBA代码完成我期望它做的事情。

3 个答案:

答案 0 :(得分:3)

我会尝试将local设置为true,这应该将日期保持为所需的格式。在您的代码中,这将是这样的:

fileNameXLSX = "H:\20160930.xlsb"
fileNameCSV = "H:\20160930.csv"
Set srcBook = Application.Workbooks.Open(filenameCSV, ReadOnly:=True)
Application.DisplayAlerts = False
srcBook.SaveAs filename:=fileNameXLSX, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False, Local:=True
srcBook.Close False
Set srcBook = Nothing
Application.DisplayAlerts = True

来源:https://msdn.microsoft.com/en-us/library/office/ff841185.aspx

答案 1 :(得分:3)

如果csv中的日期不是美国人,我建议在Open命令中将Local参数设置为True。

fileNameXLSB = "H:\20160930.xlsb"
fileNameCSV = "H:\20160930.csv"
Set srcBook = Application.Workbooks.Open(filenameCSV, ReadOnly:=True, local:=True)
Application.DisplayAlerts = False
srcBook.SaveAs Filename:=fileNameXLSB, FileFormat:=xlExcel12, CreateBackup:=False
srcBook.Close False
Set srcBook = Nothing
Application.DisplayAlerts = True

答案 2 :(得分:0)

我建议作为一个简单的解决方案,添加一行代码,选择包含日期的列,并将其数字格式设置为您喜欢的约定 - 这看起来像这样:

fileNameXLSX = "H:\20160930.xlsb"
filenameCSV = "H:\20160930.csv"
Set srcBook = Application.Workbooks.Open(filenameCSV, ReadOnly:=True)
Application.DisplayAlerts = False
srcBook.SaveAs Filename:=fileNameXLSX, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

srcBook.Sheets(1).Columns("A:A").EntireColumn.NumberFormat = "d/mm/yyyy"

srcBook.Close False
Set srcBook = Nothing
Application.DisplayAlerts = True

希望这有帮助, TheSilkCode