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

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

我检查了一下,CSV文件是以dd / mm / yyyy hh:mm格式确定的。

任何帮助解决这个将不胜感激。

所以当我手动打开CSV文件时,date是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 

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

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

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

这是一个真正的噩梦…我从来没有find一个“简单”的解决scheme。

我的解决方法是,我总是打开CSV作为string来做自己的转换,这样我没有不好的惊喜。 或者如果你想减less工作,按照Thunderframe的build议,打开文本,这种方式没有转换,并在下面的代码循环:

 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 af* 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