Вопрос:
Как открыть файл CSV с разделительной точкой с запятой с помощью VBA в Excel 2000?
Примеры данных
An ID;TEST20090222 A Name;Firstname Surname A Date;11.05.2000 Country:;SomeCountryName Currency;EUR CostA; CostB; CostC; Part1;10;20;30 Part2;;;; Part3;34;56;87
код
В Excel 2003 11.8231.8221 SP3 с VBA 6.5.1025 я могу открыть файл с разделителями с запятой со следующим кодом VBA:
Workbooks.OpenText filename:=myFilename, _ DataType:=xlDelimited, Semicolon:=True, Local:=True
Однако, когда тот же самый код запускается в Excel 2000 9.0.8961 SP1 с VBA 6.5.1025, я получаю следующую ошибку:
Ошибка компиляции: Именованный аргумент не найден
То есть – я думаю… потому что Excel 2000 не знает именованный аргумент “Local”.
Поэтому я удалил часть “Local: = True”. Но тогда проблема заключается в том, что целая строка из файла CSV записывается в одну ячейку, а не разбивается на отдельные части с запятой.
Я искал Интернет для решения, но не нашел ничего полезного и кратким.
Любые идеи?
[Обновление 17.02.2009]
Я попробовал предложение user lc с помощью макрорекордера. Однако результаты были непонятными.
Когда я открываю CSV файл с меню File- > Open… и затем выбираю CSV файл, данные, разделенные точкой с запятой, правильно разбираются. И записанный код так же прост, как:
Workbooks.Open filename:= _ «D:testdataExample 01 CSVinput.csv»
Но когда я использую этот код VBA в своем макросе, каждая строка снова попадает в одну ячейку.
В соответствии с предложением пользователя barrowc, я также изменил параметры “Региональные и языковые параметры Windows” с “German (Switzerland)” на “English (United) Состояния)”. Даже после перезагрузки Excel ничего не изменилось, такая же проблема.
Интересно, почему он работает над системой пользователя Remou. Какие региональные и языковые настройки у вас есть?
Лучший ответ:
[Обновить 22.02.2009]
В то же время я решил проблему, написав функцию импорта самостоятельно, вместо использования Workbooks.OpenText.
Я просто открываю CSV файл в виде текстового файла, читаю строки за строкой, разбивая каждую строку на разделенные точкой с запятой и записываю каждый элемент в ячейку.
Sub ImportCSVFile(filepath As String) Dim line As String Dim arrayOfElements Dim linenumber As Integer Dim elementnumber As Integer Dim element As Variant linenumber = 0 elementnumber = 0 Open filepath For Input As #1 ‘ Open file for input Do While Not EOF(1) ‘ Loop until end of file linenumber = linenumber + 1 Line Input #1, line arrayOfElements = Split(line, «;») elementnumber = 0 For Each element In arrayOfElements elementnumber = elementnumber + 1 Cells(linenumber, elementnumber).Value = element Next Loop Close #1 ‘ Close file. End Sub
Получил вдохновение от Шасура: http://vbadud.blogspot.com/2007/06/vba-read-text-files-with-leading.html
Я до сих пор не знаю, почему Workbooks.OpenText не работает в моей системе, даже если он работает в системе пользователя Remou. Я предполагаю, что это может иметь какое-то отношение к языку операционной системы (английский) и региональным и языковым настройкам (немецкий, Швейцария), но я не уверен.
Во всяком случае, обходной путь работает для меня. Благодарим вас за предложения и помощь!
Ответ №1
Не уверен, но вы можете попробовать записать макрос, чтобы сделать то же самое, и проверить код VBA, который он создает. Вы можете получить подсказку о том, чего не хватает.
Ответ №2
Я нахожу, что это работает для меня в Excel 2000:
Workbooks.OpenText filename:=myFilename, _ DataType:=xlDelimited, Semicolon:=True Ответ №3
Здесь метод OpenText из Excel 2000:
Метод OpenText
Загружает и анализирует текстовый файл как новый книга с одним листом, который содержит проанализированные текстовые файлы.
Синтаксис
expression.OpenText(Имя файла, Происхождение, StartRow, DataType, TextQualifier, Последовательный разделитель, вкладка, точка с запятой, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator)
и здесь версия Excel 2003:
Метод OpenText [Справочник по языку VBA Excel 2003]
Загружает и анализирует текстовый файл как новый книга с одним листом, который содержит проанализированные текстовые файлы.
expression.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, точка с запятой, запятая, космос, другое, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)
поэтому Local действительно был новым параметром для Excel 2003 и не будет работать в Excel 2000
Нет идеи относительно причины ошибочного поведения. Параметр Local определяется как:
Локальный Необязательный Вариант. Укажите True, если региональные настройки машины следует использовать для разделители, цифры и данные форматирования.
Возможно, вы захотите дважды проверить региональные настройки на компьютере Excel 2000 и проверить, есть ли что-то, что может привести к неправильной интерпретации данных. Кроме того, попробуйте явно указать параметры DecimalSeparator и ThousandsSeparator в методе Excel 2000 и посмотреть, помогает ли это
Ответ №4
Еще одно обходное решение – просто переименуйте CSV файлы в .txt и используйте метод OpenText.
Ответ №5
Я предпочитаю:
Workbooks.Open fileName:=myFilename, UpdateLinks:=False, Local:=True Ответ №6
часто запятая имеет значение “true” как разделитель, где обычно это десятичный разделитель. Добавить DecimalSeparator: = “,” и Боб вашего дяди
Ответ №7
Re Любые идеи?
Если вы хотите исправить файл для других, используя excel, добавьте это в первую строку файла без кавычек, за которыми следует строка: “sep =;”
Простым способом ручного открытия глупых файлов является переименование расширения на .txt или .htm, а затем из файла Excel – Open.
Из VBA я рекомендую искать метод в MSDN и вручную указывать каждый параметр, мой опыт в том, что это устраняет большинство региональных проблем.