Workbooks.OpenText not parsing csv files properly Excel 2016

前端 未结 4 514
栀梦
栀梦 2020-12-21 11:47

I\'m pretty sure this worked properly in previous versions of Excel

Test File:

d/mm/yyyy hh:mm:ss
5/12/1999 6:01:12
30/11/2001 5:00:00
4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-21 12:08

    Thanks to all for suggestions. Amongst the possible solutions, I decided, for my purposes, to remove the *.csv suffix from the file. This works and can be adaptable. QueryTable method would also work, along with the caveats posted by Axel.

    Here is code that works for my method, if anyone is interested.


    Option Explicit
    Sub foo()
        Dim WB As Workbook, wbCSV As Workbook, swbCSV As String
        Dim sFN As String, sCopyFN
        Dim FD As FileDialog
    
    Set WB = ThisWorkbook
    Set FD = Application.FileDialog(msoFileDialogFilePicker)
    
    With FD
        .AllowMultiSelect = False
        .Filters.Add "Text or CSV", "*.txt, *.csv", 1
        .Show
        sFN = .SelectedItems(1)
    End With
    
    'If CSV, remove suffix
    sCopyFN = ""
    If sFN Like "*.csv" Then
        sCopyFN = Left(sFN, Len(sFN) - 4)
        FileCopy sFN, sCopyFN
        sFN = sCopyFN
    End If
    
    Workbooks.OpenText Filename:=sFN, DataType:=xlDelimited, origin:=437, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=True, Other:=False, _
            FieldInfo:=Array(Array(1, xlDMYFormat), Array(2, xlGeneralFormat))
    
    Set wbCSV = ActiveWorkbook
    
    'Get path as string since it will not be available after closing the file
    swbCSV = wbCSV.FullName
    
    'Move the data into this workbook
    Dim rCopy As Range, rDest As Range
    
    With WB.Worksheets("sheet1")
        Set rDest = .Cells(.Rows.Count, 1).End(xlUp)
    End With
    Set rCopy = wbCSV.Sheets(1).UsedRange
    
    rCopy.Copy rDest
    
    'must close the file before deleting it
    wbCSV.Close False
    Kill swbCSV
    
    End Sub
    

提交回复
热议问题