【问题标题】:How to fix date format when converting a text file into excel?将文本文件转换为excel时如何修复日期格式?
【发布时间】:2014-11-26 12:13:14
【问题描述】:

我使用 amacro 将 txt 文件转换为 xls 但我遇到的问题是带有日期的字段没有以正确的格式转换。例如我有日期4/11/2014(dd/mm/yyyy),当文件转换为xls时,我的日期显示如下:11/4/2014.

我该如何解决?

代码:

Public Sub Read_TXT()
Dim Dir_p As String, File_to_Open As String
Dir_p = ActiveWorkbook.path
File_to_Open = Dir(Dir_p & "\")
While File_to_Open <> ""
  If InStr(1, Right(File_to_Open, 3), "txt", vbTextCompare) <> 0 Then
    Workbooks.OpenText Filename:=Dir_p & "\" & File_to_Open, _
        Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, _
        TrailingMinusNumbers:=True
    ActiveWorkbook.SaveAs Filename:=Dir_p & "\" & Left(File_to_Open, Len(File_to_Open) - 3) & "xlsx" _
        , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWorkbook.Close
  End If
  File_to_Open = Dir
Wend
End Sub

【问题讨论】:

  • 您可以发布您正在使用的代码吗?需要稍作修改才能强制使用日期格式。
  • 我把它贴出来。谢谢
  • 运行时的日期是哪一列?
  • 列:E,H,S,V,AB,AF,AJ,AL,AO,AS,AY,BE,BH

标签: excel vba xls


【解决方案1】:

您可以在这里使用两种方法,一种是短途方式(并不总是有效),另一种是长途方式,它可以奏效,但需要一段时间才能运行。

捷径:

Columns("E, H, S, V, AB, AF, AJ, AL, AO, AS, AY, BE, BH").EntireColumn.NumberFormat = "dd/mm/yyyy"

漫长的路:

Dim bigRange As Range, rCell As Range

'// If your data has headers, change the 1 to a 2 in all the lines below.

Set bigRange = Union(Range("E1", Range("E" & Rows.Count).End(xlUp)), _
    Range("H1", Range("H" & Rows.Count).End(xlUp)), _
    Range("S1", Range("S" & Rows.Count).End(xlUp)), _
    Range("V1", Range("V" & Rows.Count).End(xlUp)), _
    Range("AB1", Range("AB" & Rows.Count).End(xlUp)), _
    Range("AF1", Range("AF" & Rows.Count).End(xlUp)), _
    Range("AJ1", Range("AJ" & Rows.Count).End(xlUp)), _
    Range("AL1", Range("AL" & Rows.Count).End(xlUp)), _
    Range("AO1", Range("AO" & Rows.Count).End(xlUp)), _
    Range("AS1", Range("AS" & Rows.Count).End(xlUp)), _
    Range("AY1", Range("AY" & Rows.Count).End(xlUp)), _
    Range("BE1", Range("BE" & Rows.Count).End(xlUp)), _
    Range("BH1", Range("BH" & Rows.Count).End(xlUp)))

For Each rCell In bigRange.Cells
    With rCell
         .Value = Format(CDate(.Value2), "dd/mm/yyyy")
    End With
Next rCell

【讨论】:

  • 我将把它添加到我的代码中(Read_TXT)或者在新的 Sub 中使用它?
  • 从技术上讲,您也可以这样做,但如果您对 VBA 不太熟悉,我建议您在 Read_TXT() sub 之后将其作为单独的过程运行
  • 以任何方式似乎都不会改变格式,但它以错误的方式理解它。前任。日期 4/11/2014,转换后将显示为 11/4/2014 但日期 28/11/2014 将显示为 28/11/2014。
  • 是的,这是因为 Excel 试图将其读取为美国日期格式。如果日期是 01 - 12,它将假定这是一个月,并使用 mm/dd/yyyy 格式。如果一天大于 12,那么它显然不是一个月,Excel 将采用 dd/mm/yyyy 格式。
  • Excel 将日期保存为 Double 数据类型,因此上面的代码会读取此编码值,然后强制它以首选日期格式“dd/mm/yyyy”显示
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多