如何从文本文件中读取时间戳(DD / MM / YYYY)格式并使用Excel VBA正确解释它?

时间:2018-07-20 06:13:54

标签: excel vba excel-vba date datetime

我需要编写一个Excel VBA程序来读取文本文件并按时间戳对其进行排序。以下是文本文件的示例:

Time / Date ColumnB Column C
3/03/2017 3:07  Value B2 Value C2
3/02/2018 9:02  Value B4 Value C4
16/02/2018 9:03 Value B5 Value C5
17/02/2018 9:04 Value B6 Value C6

(File Name: import_File.csv)

,其中时间/日期采用DD / MM / YYYY HH:MM格式。

但是,当我尝试在VBA中打开它时,它遵循美国格式(MM / DD / YYYY)会自动错误地解释了第一列

File            |Correct interpretation |VBA interpretation
----------------+-----------------------+---------------------------------
3/03/2017 3:07  |3 Mar 2017 3:07:00     |3 Mar 2017 3:07
3/02/2018 9:02  |3 Feb 2018 9:02:00     |2 Mar 2018 9:02
16/02/2018 9:03 |16 Feb 2018  9:03:00   |"16/02/2018  9:03:00" as a text
17/02/2018 9:04 |17 Feb 2018  9:04:00   |"17/02/2018  9:04" as a text


以下是如何打开文件:

  

设置Data_File = Application.Workbooks.Open(“ import_File.csv”,3,True,1)

我确实尝试使用 Selection.NumberFormat =“ dd / mm / yyyy hh:mm:ss” ,但是它完全没有帮助,因为它在解释时已经错误地解释了该列首先进来。

我是否需要首先将其打开为文本文件,然后自己播放时间戳?还是有更快的方法来完成这项工作。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

使用以下示例代码作为解决方案。

Sub csvx()

    Application.DisplayAlerts = False

    strPath = Path & "C:\root\abc.csv"
    Workbooks.OpenText Filename:=strPath & strFile, DataType:=xlDelimited, Comma:=True, Local:=True

    Selection.AutoFilter
    ActiveSheet.Range("A1").Select
    ActiveWorkbook.Worksheets(ActiveSheet.Name).AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(ActiveSheet.Name).AutoFilter.Sort.SortFields.Add Key:=Range _
        ("C1:C4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets(ActiveSheet.Name).AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

   ActiveWorkbook.Save
   ActiveWorkbook.Close

   Application.DisplayAlerts = True

End Sub
  

这是日期列开始到结束的范围,例如C1:C4

示例CSV文件

enter image description here

CSV文件数据

姓名,年龄,日期 ewr,43,20-Mar ewrwe,23,11-十月 星期三,34,11-十一月

答案 1 :(得分:0)

如果您的本地设置使用与您想要的日期格式相同的日期格式,请将Local:=True限定符添加到Workbook.Open,以强制日期解释遵循您的要求计算机的本地设置(而不是VBA内置的默认EN-US解释)。

示例:

Set Data_File = Workbooks.Open Filename:="import_File.csv", ReadOnly:=True, Format:=1, Local:=True