Excel VBA导入.txt文件导致错误的date格式

我正在导入一个文本文件(不是.csv,一个.txt),它是制表符分隔的。 第一列包含date,一些是dd / mm / yyyy格式,另一些是dd / mm / yyyy hh:mm:ss格式。

当运行下面的代码时,几个date以mm / dd / yyyy格式出现。 这样做的事情没有什么不寻常的,它似乎是随机发生的(有些人有时间,有些人不知道,但是来源仍然是每年一个月)

Sub LQMTrend() Dim fp, textLine As String Dim iRow As Integer Dim lineArr() As String Dim ws As Worksheet Set ws = Sheets("Data") iRow = 1 fp = "//srv57data1\product_support\xChange\Beam Profile Image Tool\LQM Reviews\Log files\Log file.txt" Open fp For Input As #1 Do Until EOF(1) Line Input #1, textLine lineArr = Split(textLine, vbTab) For x = 0 To UBound(lineArr) ws.Cells(iRow, x + 1) = lineArr(x) Next x iRow = iRow + 1 Loop Close #1 

我试过宣布lineArr作为一个变种,但没有区别。 有任何想法吗?

谢谢

编辑:我感谢这是相似的Excel VBA:导入CSVdate为dd / mm / yyyy但最简单的答案在每种情况下不同 – 对于CSV文件的“使用本地date设置”导入选项解决了这个问题,这不可用时打开.txt文件,date必须使用CDate或类似的dynamic转换。 希望这有助于澄清。

正如Assylias提到的,有些date可能是模糊的。 到Excel的date只不过是一个格式化的数字,它代表自01/01/1900以来的天数,今天(2016年3月3日)excel只不过是42447。使用数字时,date格式。

我build议改变

 ws.Cells(iRow, x + 1) = lineArr(x) 

 With ws.Cells(iRow, x + 1) If x = 0 Then .Value = CLng(CDate(lineArr(x))) .NumberFormat = "mm/dd/yyyy;@" Else .Value = lineArr(x) End If End With 

Excel首先尝试将datestring转换为本地设置的格式。 如果失败的话,比如月份高于12,那么它就会逆转月份和date。 既然你正在处理这两种格式,你最好的select可能是自己parsingdate:

 Sub Macro1() Dim arr() As String Dim mydate As Date ' US format 6 may 2015 arr = Split("05/06/2015", "/") mydate = DateSerial(Year:=arr(2), Month:=arr(0), Day:=arr(1)) ' UK format 6 may 2015 arr = Split("06/05/2015", "/") mydate = DateSerial(Year:=arr(2), Month:=arr(1), Day:=arr(0)) End Sub 

将其写入工作表之前,需要将stringdate转换为“实际date”(序列号)。 这是一个方法来做到这一点。 改变数组元素以反映原始文件中的正确列。

 'convert date to proper date before writing to worksheet 'Assuming date is in column 3 Dim DT As Date, TM As Date, V As Variant V = Split(lineArr(2)) 'is there a time segment If UBound(V) = 1 Then TM = TimeValue(V(1)) Else TM = 0 End If 'convert the date segment to a real date V = Split(V(0), "/") DT = DateSerial(V(2), V(1), V(0)) + TM 'write it back to linearr lineArr(2) = DT 

您应该在导入之后更改date。 一个文本文件,如CSV文件,没有任何格式。