vba open csv file messed date format

时间:2017-07-02 10:43:37

标签: excel vba csv date

我使用foo.xlsm文件中的vba打开bar.csv文件,然后将其复制到foo.xlsm文件。然而,令人惊讶的是,事实证明它会弄乱日期格式,有时会识别为mm/dd/yyyy,有些人dd/mm/yyyy

csv文件有这样的行:

"USD/MYR","TRF:1234","20/04/2017","01/06/2017","11/09/2017","01/06/2017"

,所以所有日期都是dd/mm/yyyy格式。

如果我手动打开bar.csv文件,则会正确显示4个日期,如

20/4/2017   1/6/2017    11/9/2017   1/6/2017

但是,如果从foo.xlsm使用vba打开bar.csv文件,则结果是

20/04/2017  6/1/2017    9/11/2017   6/1/2017

,因此后来被复制到foo.xlsm错误的日期。

最好先将日期解释为mm/dd/yyyy,但只有在不起作用的情况下,它才会将其读作dd/mm/yyyy

vba代码是这样的:

Sub import_via_excel(source_file As String, source_sheet As String, target_sheet As String)
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    Set wbThis = ActiveWorkbook
    Dim dest_sheet As Worksheet
    Set dest_sheet = wbThis.Sheets(target_sheet)

    Dim src_book As Workbook
    Set src_book = Workbooks.Open(source_file, True, True) ' Open in "ReadOnly" mode
    Dim src_sheet As Worksheet
    Set src_sheet = src_book.Sheets(source_sheet)
    src_sheet.Activate
    last_col = ActiveSheet.UsedRange.Columns.Count
    last_row = ActiveSheet.UsedRange.Rows.Count

    Dim row As Integer          ' row counter.
    Dim col As Integer          ' col counter.
    Dim src_data  As String
    For row = 1 To last_row
        For col = 1 To last_col
            src_data = src_sheet.Cells(row, col).Value
            dest_sheet.Cells(row, col).Value = src_data
        Next col
    Next row

    src_book.Close False ' close file without saving (FALSE)
    Set src_book = Nothing

    wbThis.Activate

ErrHandler:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

可能出了什么问题?

2 个答案:

答案 0 :(得分:3)

如果您使用Workbooks.Open打开CSV文件,Excel会将日期转换为美国格式,除非不可能(因此会尝试其他格式)。

您可以尝试添加参数Local:=True来解决它。

答案 1 :(得分:2)

因为看起来你是正确的,Excel试图首先将日期解释为mm / dd / yyyy,只有当它不起作用时,它才会将其读作dd / mm / yyyy:

使用NumberFormat属性强制使用正确的格式:

For row = 1 To last_row
    For col = 1 To last_col
        dest_sheet.Cells(row, col).Select
        ActiveCell.NumberFormat = "dd-mm-yyyy"
        src_data = src_sheet.Cells(row, col).Value
        dest_sheet.Cells(row, col).Value = src_data
    Next col
Next row

尝试并查看是否有帮助,首先在每个目标单元格上强制使用正确的日期格式。