导入时,VBA将我的日期更改为mm / dd / yyyy hh:mm

时间:2017-01-13 00:52:06

标签: excel vba excel-vba date datetime

所以我从计算机生成的CSV文件导入日期。在CSV文件中,日期采用dd / mm / yyyy hh:mm格式。但是当我使用VBA导入它时,VBA将其读取为mm / dd / yyyy hh:mm。所以VBA将2015年1月5日(5月1日)视为1月5日。

我查了一下,CSV文件绝对是dd / mm / yyyy hh:mm格式。

任何帮助解决这个问题都将非常感激。

因此,当我手动打开CSV文件时,日期为dd / mm / yyyy hh:mm格式。像2016年12月1日将是01/12/2016 1:00。但是当VBA打开它时,它会改为12/01/2016 1:00。

这是有问题的整个代码。它没什么复杂的,我不知道它有什么不对。

Sub import()
    Dim calbook As Workbook
    Dim newwb As Workbook
    Dim destiwb As Workbook
    Dim directory As String
    Dim Filename As String
    directory = "C:\Users\winterco\Desktop\"
    Set calbook = Workbooks("Data_totaliser1.xlsm")
    Filename = Dir(directory & "*.CSV")
    Set newwb = Workbooks.Add
    Set destiwb = ActiveWorkbook
    Do While Filename <> ""
        Workbooks.OpenText (directory & Filename)
        Call Sort_Data(Filename, destiwb, directory, calbook)
        Filename = Dir()  
    Loop  
End Sub

2 个答案:

答案 0 :(得分:0)

如果您未指定所有格式详细信息,Excel会在打开文本文件时使用最近使用的Text to Columns设置。

如果您使用Workbooks.OpenText方法(而不是Workbooks.Open方法),则可以指定所有这些格式。尝试在打开文本文件时录制宏,以查看格式的指定方式。

您可以提供的格式之一是日,月和年的顺序。如果找不到有效的格式,可以将该列定义为Text,然后在后续流程中使用公式解析数据。

答案 1 :(得分:0)

这是一场真正的噩梦......我从来没有找到过简单的&#34;溶液

我的解决方法是,我总是以VBA作为字符串打开CSV来自行进行转换,这样我就不会有惊喜。或者如果你想减少它的工作量,可以像Thunderframe建议的那样,以文本形式打开,这样就没有转换,并在下面的代码中执行循环:

Dim z: z = VBA.Split(VBA.Replace(x, "-", "/"), "/") 'works with 01/01/2001 and 01-01-2001
answer = DateSerial(Left(z(2), 4), z(1), Left(z(0), 2)) 'left for the case DD/MM/YY 00:00:00, because unlike you I don't give a f* for time of day. If you want the time of the day, you'll need to use :

z=split(x,":")
answer =answer + TimeSerial(right(z(0),2)  , z(1), z(2) ) 'untested code