Я почти уверен, что это работало правильно в предыдущих версиях Excel.
Тестовый файл:
d/mm/yyyy hh:mm:ss
5/12/1999 6:01:12
30/11/2001 5:00:00
А разделителем между датой и временем является пробел (код ASCII 32).
Если файл сохранен как файл
.txt
, метод OpenText выполняет синтаксический анализ правильно.Если файл сохранен как файл
.csv
, метод OpenText вообще не работает.Если пробелы заменены запятыми, а файл сохранен как файл
.csv
, метод OpenText разделит строки на два столбца, но не будет правильно интерпретировать строку даты.
Мои региональные настройки Windows — mdy, а моя версия Excel — 2016.
Option Explicit
Sub foo()
Dim WB As Workbook
Dim sFN As String
Dim FD As FileDialog
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.AllowMultiSelect = False
.Filters.Add "Text or CSV", "*.txt, *.csv", 1
.Show
sFN = .SelectedItems(1)
End With
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 WB = ActiveWorkbook
End Sub
.Filters.Add "Text or CSV", "*.txt, *.csv", 1
Хм, нет,CSV
иText
на самом деле не одно и то же дляExcel
. Мало того, что настройки разделителя очень специфичны дляCSV
и не устанавливаются с помощью параметра вWorkbooks.OpenText
, также обработка юникода является особым случаем дляCSV
и заметно отличается отText
. - person Axel Richter   schedule 13.02.2017Text Files (*.prn,*.txt,*.csv)
. В 2016 VBA кажется, что он терпит неудачу только в том случае, если суффикс файла равен.csv
. Другие суффиксы, или даже файлы без суффикса, успешны. - person Ron Rosenfeld   schedule 13.02.2017CSV
не просто текст дляExcel
. Есть даже недокументированный параметрsep=
в начале файла для изменения ожидаемого разделителя. См. также en.wikipedia.org/wiki/. - person Axel Richter   schedule 13.02.2017