Всем привет.
Не могу придумать способ реализации для вроде бы элементарного действия.
Итак, есть кнопка на панели инструментов, при нажатии которой должно выскочить диалоговое окно выбора файла, после чего выбранный файл (CSV или XLS) должен открыться в Excel (в той копии приложения, из которой запущен макрос)
Разумеется, я знаю, как вывести диалоговое окно выбора файла.
Итак, у меня есть путь к файлу (CSV или XLS), и мне надо программно открыть этот файл.
С файлами Excel проблем нет — тут поможет Workbooks.Open ИмяФайла
А вот с CSV — проблема.
Когда мы открываем CSV файл через встроенную в Excel кнопку открытия файла (или Ctrl + O, что то же самое,
Excel АВТОМАТИЧЕСКИ распознаёт, какой разделитель столбцов используется.
Когда же мы открываем файл программно, Excel использует настроенные в системе (или в самом Excel) разделители.
А в моём случае, разделители в CSV могут быть любые, и хотелось бы, чтобы Excel сам определял разделитель.
Стал я пробовать различные варианты:
(предположим, что путь в файлу CSV мы уже знаем)
Const CSVfilename = «C:test.csv»
Sub test1()
Workbooks.Open CSVfilename
End Sub
Sub test2()
Workbooks.OpenText CSVfilename
End Sub
Sub test3()
ThisWorkbook.FollowHyperlink CSVfilename
End Sub
Sub test4()
Application.Dialogs(xlDialogOpen).Show
End Sub
Sub test5()
Shell «»»» & Application.Path & «excel.exe» & «»» /dde » & CSVfilename
End Sub
Sub test6()
CreateObject(«wscript.shell»).Run CSVfilename
End Sub
Варианты 1-4 открывают файл, неверно распознав разделитель столбцов
Вариант 5 открывает корректно, но — в новой копии Excel, что неприемлимо
(как использовать ключи командной строки, чтобы отправить файл в запущенный Excel, я не знаю)
Вариант 6 открывает файл в программе, назначенной для CSV по-умолчанию (у меня это Notepad++)
Поскольку код будет использоваться на множестве компов, этот вариант не подходит.
У кого какие идеи?
Вроде бы, этот вопрос уже обсуждался, — но поиском не смог найти ответ.
- Надстройки Excel
- Текстовые файлы
- файлы CSV
- Листы Excel
- Объединение файлов
- Книги Excel
- Массивы
- Работа с файлами
Надстройка предназначена для облегчения импорта данных в Excel из текстовых файлов с разделителями (например, из CSV)
Пока во вложении — обычный файл Excel с нужными макросами, надстройку выложу позже
Использовать функции файла (надстройки) совсем не сложно.
Вот несколько примеров:
Sub ЗагрузитьТекстовыйФайлВАктивнуюЯчейку() CSV2Excel End Sub Sub ЗагрузитьCSVФайлВСледующуюПустуюЯчейкуПервогоСтолбца() CSV2Excel "a", , , , "*.csv" End Sub Sub ЗагрузитьТекстовыйФайлВНовуюКнигу() ' текстовый файл с разделителем "пробел" CSV2Excel "NewWorkbook", "Импорт данных в новую книгу", , , , " " End Sub
- 60511 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Уважаемое сообщество, доброго времени суток.
Опять недостаток знаний вынудил меня обратиться к вам за советом. Итак, в чём суть проблемы:
Имеется файл формата csv, данные из которого подлежат дальнейшему анализу в Excel. Этот файл открывается автоматически, когда запускается соответствующий макрос и вроде бы всё работает дальше, но писал я код открытия и конвертации данного файла только с помощью уже имеющихся у меня знаний. И вот, ожидаемо, вчера обнаружил, что не все данные отображаются корректно. Во вложении 2 файла: *.xlsm (в котором и находится та часть кода, которую я «наваял») и файл *.сsv (для примера).
Заранее прошу не смеяться над моим «решением» данной задачи, и прошу подсказать, как это нужно делать корректно.
P.S. Я день потратил на чтение разнообразных ответов на данный вопрос на разных форумах и в интернете, но, к сожалению, так и не решил эту задачу.
Заранее спасибо.
Содержание
- Загрузка файла CSV на лист Excel
- Комментарии
- Excel импорт csv макросом
- Как импортировать файл csv на лист?
- Методы передачи данных в Excel из Visual Basic
- Аннотация
- Дополнительная информация
- Использование службы автоматизации для передачи данных по ячейкам
- Использование автоматизации для передачи массива данных в диапазон на листе
- Использование автоматизации для передачи набора записей ADO в диапазон листа
- Использование автоматизации для создания таблицы QueryTable на листе
- Использование буфера обмена
- Создание текстового файла с разделителями, который Excel может анализировать по строкам и столбцам
- Передача данных на лист с помощью ADO
- Использование DDE для передачи данных в Excel
Загрузка файла CSV на лист Excel
Надстройка предназначена для облегчения импорта данных в Excel из текстовых файлов с разделителями (например, из CSV)
Пока во вложении — обычный файл Excel с нужными макросами, надстройку выложу позже
Использовать функции файла (надстройки) совсем не сложно.
Вот несколько примеров:
Комментарии
Пётр, оформляйте заказ на сайте, прикрепляйте примеры файлов (исходный CSV и итоговый XLS), и подробно описывайте, что и как должно работать.
Здравствуйте, интересует платная доработка скрипта этого скрипта импорта.
Нужно для каждой строки основного листа из одной колонки распарсить содержимое (прописано через «|») на отдельный лист в несколько строк с ключем ID из первоначальной колонке (ну типа как связанные таблицы в БД).
Возьметесь? Предложение прошу в личку. С уважением Петр
Добрый день. Подскажите пожалуйста как ипортировать CSV (его размер около 1Гб) в Excel .
Надо код немного доработать
Если готовы оплатить — пишите на почту, сделаю
Добрый день! Подскажите, как сделать, чтобы при нажатии на кнопку «Загрузить файл CSV, начиная с первой пустой ячейки в первом столбце» данные разделись по запятой и при этом дробная часть заменялась с точки на запятую (т.е. 12,13,14.5 и т.д. на 12 13 14,5)
Добрый день!
Для решения моей задачи подходит 3-й код — Выгрузка в новую книгу. Но, когда я это делаю, то создается новая книга с вкладкой «данные» и все, вкладка пустая, ничего не выгружается. Сначала он предлагает выбрать файл .csv, я выбираю, затем книга с пустой вкладкой. Не подскажете почему так происходит?
Я столкнулся с проблемой, когда файл .csv в ручную открывается как надо, а вот через макрос все в строках. Нет ли какой-то простой возможности открыть через макрос в нормальном виде? Открываю командой Workbooks.Open Name.
Та же проблема, что и в посте 17 — Кавычки. Что дописать для удаления кавычек? Заранее спасибо.
Вообщем нужно быть внимательным к коду функции, где прописан разделитель, который стоит конкретно в вашем .csv файле. Если в качестве разделителя стоит запятая, то пишем : Optional ByVal ColumnsSeparator$ = «,» . далее код. Если же точка с запятой ,то: Optional ByVal ColumnsSeparator$ = «;» . Только в этом случае будет корректное разбиение на столбцы.
Файлы *.csv в большинстве своём открываются «криво», в одном столбце через запятую, не разбиваясь по столбцам. Мне же нужно при открытии разнесение по столбцам. И такой макрос я нашёл, но он открывает новую книгу. Мне же нужно чтобы ФАЙЛ *.csv можно было залить на лист уже открытой книги. Вот и наткнулся на Ваш макрос, думал что нужное найти. Но Ваша функция и по столбцам не разбивает.
Тогда зачем вам разбираться в этом макросе, — файлы CSV, в большинстве своём, открываются как обычная книга Excel
Так что просто запишите свои действия встроенным в Excel макрорекордером, — получите макрос открытия CSV файла из одной строки.
Увы, пока я новичок в VBA, только начал изучать. Оттого сделать мне этого не под силу, как и многим другим несведущим наверное тоже.
Среди параметров вызова функции есть «Разделитель столбцов» — если вы его не задали, используется значение по-умолчанию (точка с запятой или запятая, не помню уже)
Пропишите нужный разделитель — и всё будет корректно открываться.
Файл .csv безусловно открывается, но вот только в том виде в каком он и существует. Разделение на столбцы не происходит.
Максим, для вашей задачи у меня есть специальная надстройка:
http://excelvba.ru/programmes/Lookup
Подсткажите плз, возможно ли с помощью этого макроса импортировать колонки в соответствующие колонки в excel. Например, в csv 2 колонки «Артикул» и «Цена», надо импортировать колонку с ценой, с привязкой по артикулу, т.е. что бы цена артикула в csv соответствовала цене артикула в excel.
Сделайте цикл по файлам, — каждый файл по-отдельности обрабатывая этим кодом
Функция для получения списка файлов (с примером цикла по найденным файлам):
http://excelvba.ru/code/FilenamesCollection
Вам осталось только совместить эти 2 макроса
Замечательный код. Все работает на ура!
Как заставить его обрабатывать группу файлов? Сейчас при выборе файла csv он берет только один файл.
Добрый день!
Спасибо за данный скрипт. У меня почти все работает, только выгружается не вся информация, т.к первая строка по длинне меньше остальных и все мой 1000 строк выгружаются в шесть колонок.
Что нужно добавить в код, чтобы файл читался со второй строки или обрабатывал массив по максимальной длине строки?
вставляет из csv фаила только 25 строк а остальные 1000 нету?
спасибо за быстрый ответ!
еще интересует как можно последний (М) столбец сделать в виде гиперссылки с заданным названием (ссылка :))
нашел в другом Вашем примере:
‘ если нужна гиперссылка на файл во втором столбце
ActiveSheet.Hyperlinks.Add Range(«b» & Rows.Count).End(xlUp), ПутьКФайлу, «», _
«Открыть файл» & vbNewLine & ИмяФайла
как это добавить в данный скрипт к сожалению не представляю (уже читаю Вашу статью «как я стал программистом» :))
После строки
Set fso = Nothing
добавьте строку
Kill Filename$ ‘ удаление файла
Благодарю, весьма удобный скрипт.
подскажите, как добавить удаление обработанного CSV файла ?
пробовал след образом:
————————
Set FSO = CreateObject(«scripting.filesystemobject») ‘ читаем текст из выбранного файла
Set ts = FSO.OpenTextFile(Filename$, 1, True): txt$ = ts.ReadAll:[B] ts.Delete[/B]
Set ts = Nothing: Set FSO = Nothing
————————-
безрезультатно
второй вопрос — как явно указать файл с исходными данными?
Всё можно исправить.
Добавьте в код удаление кавычек (символ с кодом 34),
а по кодировке — возьмите функцию перекодировки здесь:
http://excelvba.ru/code/encode
Если сами не справитесь — вы всегда можете заказать решение под свои нужды
(выслав мне исходный файл CSV, и пример желаемого результата в Excel)
Подскажите после импорта все значения заключены в кавычки, в том числе и в пустых ячейках (прописывается «»)
можно ли это исправить.
И еще если в исходном файле была кириллица она «превращается» в кракозябры, как исправить кодировку.
Источник
Excel импорт csv макросом
Как импортировать файл csv на лист?
Для нас может быть легко импортировать или сохранить рабочий лист как файл CSV, но пробовали ли вы когда-нибудь импортировать файл CSV в рабочий лист? В этой статье я расскажу о некоторых интересных методах, которые помогут вам справиться с этой задачей.
Обычно в Excel вы можете применить функцию мастера импорта текста для импорта файла CSV на рабочий лист, сделайте следующее:
1. Активируйте рабочий лист, который вы хотите импортировать CSV-файл, затем нажмите Данные > Из текста, см. снимок экрана:
2. В Импортировать текстовый файл в окне укажите CSV-файл, который вы хотите импортировать, см. снимок экрана:
3. Затем нажмите Импортировать кнопку на Шаге 1 Мастер импорта текста, наведите на разграниченный вариант, см. снимок экрана:
4. Затем нажмите Далее > кнопку, на шаге 2 мастера установите флажок Запятая под Разделители вариант, см. снимок экрана:
5. Затем продолжайте нажимать Следующая> кнопку, на шаге 3 мастера выберите Текст в разделе Формат данных столбца, и вы увидите, что первый столбец будет выделен. Затем удерживайте Shift клавиша для выделения всех столбцов. Смотрите скриншот:
6. Затем нажмите Завершить кнопка, в выдвинутой Импортировать данные В диалоговом окне выберите место, куда вы хотите поместить данные, см. снимок экрана:
7. Нажмите OK кнопка, CSV-файл был сразу импортирован на рабочий лист.
Если вам надоел шаг за шагом описанный выше метод, следующий код VBA также может решить эту проблему.
1. Удерживайте ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA : Импортируйте файл CSV на лист:
3, Затем нажмите F5 ключ для запуска этого кода и выберите файл CSV, который вы хотите импортировать, в появившемся Kutools for Excel диалог, см. снимок экрана:
4. Затем нажмите Откройте и щелкните ячейку, в которую вы хотите поместить импортированные данные, см. снимок экрана:
5, Затем нажмите OK, конкретный файл CSV был импортирован в рабочий лист.
Если у вас есть Kutools for Excel, С его Вставить файл в курсор Утилита, вы можете быстро импортировать CSV-файл, текстовый файл, файл Excel или PRN-файл в текущий рабочий лист.
После установки Kutools for Excel, пожалуйста, сделайте следующее:
1. Активируйте рабочий лист, на который вы хотите импортировать данные файла CSV.
2. Затем нажмите Кутулс Плюс > Импорт Экспорт > Вставить файл в курсор, см. снимок экрана:
3. В разделе Вставить файл в курсор диалоговое окно, пожалуйста, выполните следующие действия:
(1.) Щелкните кнопка для выбора ячейки, в которую вы хотите вывести данные;
(2.) Затем щелкните Приложения кнопка, чтобы открыть окно Выбрать файл для вставки в позицию курсора ячейки;
(3.) Во всплывающем окне выберите Файлы CSV в правом нижнем раскрывающемся списке, а затем выберите файл CSV, который вы хотите импортировать.
Kutools for Excel : с более чем 300 удобными надстройками Excel, бесплатно и без ограничений в течение 30 дней. |
4. После указания файла CSV нажмите Откройте кнопку, чтобы вернуться в прежнее диалоговое окно, а затем нажмите OK для импорта файла CSV. И файл CSV будет вставлен в нужное вам место.
Источник
Методы передачи данных в Excel из Visual Basic
Аннотация
В этой статье рассматриваются различные методы передачи данных в Microsoft Excel из приложения Microsoft Visual Basic. В этой статье также представлены преимущества и недостатки каждого метода, чтобы можно было выбрать оптимальное решение.
Дополнительная информация
Для передачи данных в книгу Excel чаще всего используется автоматизация. Автоматизация обеспечивает максимальную гибкость при указании расположения данных в книге, а также возможность форматирования книги и создания различных параметров во время выполнения. С помощью службы автоматизации можно использовать несколько подходов для передачи данных:
- Передача ячейки данных по ячейкам
- Передача данных в массиве в диапазон ячеек
- Передача данных из набора записей ADO в диапазон ячеек с помощью метода CopyFromRecordset
- Создание таблицы QueryTable на листе Excel, содержащей результат запроса к источнику данных ODBC или OLEDB
- Передача данных в буфер обмена и вставка содержимого буфера обмена на лист Excel
Существуют также методы, которые можно использовать для передачи данных в Excel, которые не обязательно требуют автоматизации. Если вы работаете на стороне сервера приложений, это может быть хорошим подходом для того, чтобы отойдите от клиентов к массовой обработке данных. Для передачи данных без автоматизации можно использовать следующие методы:
- Передача данных в текстовый файл с разделителями-табуляции или запятыми, который Excel позже может проанализировать в ячейки на листе
- Передача данных на лист с помощью ADO
- Передача данных в Excel с помощью Динамического обмена данными (DDE)
В следующих разделах приведены более подробные сведения о каждом из этих решений.
Примечание При использовании Microsoft Office Excel 2007 можно использовать новый формат файла книги Excel 2007 (*.xlsx) при сохранении книг. Для этого найдите следующую строку кода в следующих примерах кода:
Замените этот код следующей строкой кода:
Кроме того, база данных Northwind по умолчанию не включена в Office 2007. Однако базу данных Northwind можно скачать из Microsoft Office Online.
Использование службы автоматизации для передачи данных по ячейкам
С помощью службы автоматизации можно передавать данные на лист по одной ячейке за раз:
Передача ячеек данных по ячейкам может быть вполне приемлемым подходом, если объем данных невелик. Вы можете размещать данные в любом месте книги и условно форматировать ячейки во время выполнения. Однако этот подход не рекомендуется, если у вас есть большой объем данных для передачи в книгу Excel. Каждый объект Range, полученный во время выполнения, приводит к запросу интерфейса, чтобы передача данных таким образом была медленной. Кроме того, Microsoft Windows 95 и Windows 98 имеют ограничение в 64 КБ на запросы интерфейса. Если вы достигнете или превысите это ограничение в 64 КБ для запросов интерфейса, сервер автоматизации (Excel) может перестать отвечать на запросы или могут возникнуть ошибки, указывающие на нехватку памяти.
Еще раз перенос ячеек данных допускается только для небольших объемов данных. Если вам нужно перенести большие наборы данных в Excel, следует рассмотреть одно из решений, представленных позже.
Дополнительные примеры кода для автоматизации Excel см. в статье «Автоматизация Microsoft Excel из Visual Basic».
Использование автоматизации для передачи массива данных в диапазон на листе
Массив данных можно передать в диапазон из нескольких ячеек одновременно:
При передаче данных с помощью массива, а не ячейки по ячейкам вы можете реализовать огромное повышение производительности с большим объемом данных. Рассмотрим следующую строку из приведенного выше кода, который передает данные в 300 ячеек листа:
Эта строка представляет два запроса интерфейса (один для объекта Range, возвращаемого методом Range, и другой для объекта Range, возвращаемого методом Resize). С другой стороны, для передачи ячейки данных по ячейкам требуются запросы 300 интерфейсов к объектам Range. По возможности вы можете воспользоваться преимуществами массовой передачи данных и сокращения количества запросов интерфейса.
Использование автоматизации для передачи набора записей ADO в диапазон листа
В Excel 2000 представлен метод CopyFromRecordset, который позволяет переносить набор записей ADO (или DAO) в диапазон на листе. В следующем коде показано, как автоматизировать Excel 2000, Excel 2002 или Office Excel 2003 и передавать содержимое таблицы Orders в образце базы данных Northwind с помощью метода CopyFromRecordset.
Примечание Если вы используете версию Office 2007 базы данных Northwind, необходимо заменить следующую строку кода в примере кода:
Замените эту строку кода следующей строкой кода:
Excel 97 также предоставляет метод CopyFromRecordset, но его можно использовать только с набором записей DAO. CopyFromRecordset с Excel 97 не поддерживает ADO.
Дополнительные сведения об использовании ADO и метода CopyFromRecordset см. в статье «Передача данных из набора записей ADO в Excel с помощью автоматизации».
Использование автоматизации для создания таблицы QueryTable на листе
Объект QueryTable представляет таблицу, созданную на основе данных, возвращаемых из внешнего источника данных. При автоматизации Microsoft Excel можно создать таблицу QueryTable, просто указав строку подключения к OLEDB или источнику данных ODBC вместе со строкой SQL. Excel несет ответственность за создание набора записей и его вставку на лист в указанном расположении. Использование таблиц QueryTables дает несколько преимуществ по сравнению с методом CopyFromRecordset:
- Excel обрабатывает создание набора записей и его размещение на листе.
- Запрос можно сохранить с помощью таблицы QueryTable, чтобы его можно было обновить позже, чтобы получить обновленный набор записей.
- При добавлении новой таблицы QueryTable на лист можно указать, что данные, уже существующие в ячейках листа, будут сдвинуты в соответствии с новыми данными (дополнительные сведения см. в свойстве RefreshStyle).
В следующем коде показано, как автоматизировать Excel 2000, Excel 2002 или Office Excel 2003 для создания новой таблицы QueryTable на листе Excel с помощью данных из образца базы данных Northwind:
Использование буфера обмена
Буфер обмена Windows также можно использовать в качестве механизма передачи данных на лист. Чтобы вставить данные в несколько ячеек на листе, можно скопировать строку, в которой столбцы разделены символами табуляции, а строки разделены символами каретки. В следующем коде показано, как Visual Basic может использовать объект буфера обмена для передачи данных в Excel:
Создание текстового файла с разделителями, который Excel может анализировать по строкам и столбцам
Excel может открывать файлы с разделителями-табуляции или запятыми и правильно анализировать данные в ячейках. Эту функцию можно использовать, если вы хотите перенести большой объем данных на лист, используя небольшой объем (при наличии) службы автоматизации. Это может быть хорошим подходом для клиент-серверного приложения, так как текстовый файл может быть создан на стороне сервера. Затем можно открыть текстовый файл на клиенте с помощью службы автоматизации, где это необходимо.
В следующем коде показано, как создать текстовый файл с разделителями-запятыми из набора записей ADO:
Обратите внимание, что при использовании версии Office 2007 базы данных Northwind необходимо заменить следующую строку кода в примере кода:
Замените эту строку кода следующей строкой кода:
Если в текстовом файле есть расширение .CSV, Excel открывает его без отображения мастера импорта текста и автоматически предполагает, что файл разделен запятыми. Аналогичным образом, если файл имеет расширение .TXT, Excel автоматически анализирует файл с помощью разделителей вкладок.
В предыдущем примере кода Excel был запущен с помощью инструкции Оболочки, а имя файла использовался в качестве аргумента командной строки. В предыдущем примере автоматизация не использовалась. Однако при необходимости можно использовать минимальный объем автоматизации, чтобы открыть текстовый файл и сохранить его в формате книги Excel:
Передача данных на лист с помощью ADO
С помощью поставщика Microsoft Jet OLE DB можно добавлять записи в таблицу в существующей книге Excel. «Таблица» в Excel — это просто диапазон с определенным именем. Первая строка диапазона должна содержать заголовки (или имена полей), а все последующие строки — записи. Ниже показано, как создать книгу с пустой таблицей с именем MyTable.
Excel 97, Excel 2000 и Excel 2003
Запустите новую книгу в Excel.
Добавьте следующие заголовки в ячейки A1:B1 листа Sheet1:
A1: FirstName B1: LastName
Отформатировать ячейку B1 как выровненную по правому краю.
В меню «Вставка» выберите «Имена», а затем выберите «Определить». Введите имя MyTable и нажмите кнопку «ОК».
Сохраните новую книгу как C:Book1.xls и закройте Excel.
Чтобы добавить записи в MyTable с помощью ADO, можно использовать следующий код:
Excel 2007
В Excel 2007 запустите новую книгу.
Добавьте следующие заголовки в ячейки A1:B1 листа Sheet1:
A1: FirstName B1: LastName
Отформатировать ячейку B1 как выровненную по правому краю.
На ленте откройте вкладку «Формулы » и выберите команду «Определить имя». Введите имя MyTable и нажмите кнопку «ОК».
Сохраните новую книгу как C:Book1.xlsx и закройте Excel.
Чтобы добавить записи в таблицу MyTable с помощью ADO, используйте код, похожий на следующий пример кода.
При добавлении записей в таблицу таким образом форматирование в книге сохраняется. В предыдущем примере новые поля, добавленные в столбец B, форматируются с выравниванием по правому краю. Каждая запись, добавляемая в строку, заимствует формат из строки над ней.
Обратите внимание, что при добавлении записи в ячейку или ячейки листа она перезаписывает все данные, которые ранее были в этих ячейках. Другими словами, строки на листе не «помещаются вниз» при добавлении новых записей. Это следует учитывать при проектировании макета данных на листах.
Метод обновления данных на листе Excel с помощью ADO или DAO не работает в среде Visual Basic для приложений в Access после установки Пакета обновления 2 (SP2) Office 2003 или после установки обновления для Access 2002, включенного в статью базы знаний Майкрософт 904018. Этот метод хорошо работает в среде Visual Basic для приложений из других приложений Office, таких как Word, Excel и Outlook.
Дополнительные сведения см. в следующей статье:
Дополнительные сведения об использовании ADO для доступа к книге Excel см. в статье «Как запрашивать и обновлять данные Excel с помощью ADO из ASP».
Использование DDE для передачи данных в Excel
DDE — это альтернатива автоматизации в качестве средства взаимодействия с Excel и передачи данных. Однако с появлением автоматизации и COM DDE больше не является предпочтительным методом для взаимодействия с другими приложениями и должен использоваться только в том случае, если вам не доступно другое решение.
Для передачи данных в Excel с помощью DDE можно использовать метод LinkPoke для передачи данных в определенный диапазон ячеек или метод LinkExecute для отправки команд, которые будет выполнять Excel.
В следующем примере кода показано, как установить диалог DDE с Excel, чтобы можно было перенести данные в ячейки на листе и выполнить команды. В этом примере для успешной установки беседы DDE в LinkTopic Excel|MyBook.xls, книга с именем MyBook.xls уже должна быть открыта в работающем экземпляре Excel.
При использовании Excel 2007 для сохранения книг можно использовать новый формат .xlsx файла. Убедитесь, что имя файла обновлено в следующем примере кода. В этом примере Text1 представляет элемент управления Text Box в форме Visual Basic:
При использовании LinkPoke с Excel вы указываете диапазон в нотации столбца строк (R1C1) для LinkItem. Если данные разделяются на несколько ячеек, можно использовать строку, в которой столбцы разделяются вкладками, а строки разделяются символами возврата каретки.
Если вы используете LinkExecute, чтобы попросить Excel выполнить команду, необходимо предоставить Excel команду в синтаксисе языка макросов Excel (XLM). Документация по XLM не входит в excel версий 97 и более поздних версий.
DDE не рекомендуется для взаимодействия с Excel. Автоматизация обеспечивает максимальную гибкость и предоставляет больше доступа к новым функциям, которые предлагает Excel.
Источник
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
Option Explicit Sub Search1() Dim wb1 As Workbook, wb2 As Workbook Dim fnam$, fnam3$, fnam4$, fnam5$, fnam6$ Dim fpath$ Dim a, Msg, Style, Response, i fpath$ = ActiveWorkbook.Worksheets("Parameters").Range("B3").Value 'Path to the folder where the csv file is st fnam$ = ActiveWorkbook.Worksheets("Parameters").Range("B4").Value 'Part of the name of the new file fnam3$ = ActiveWorkbook.Worksheets("Parameters").Range("B5").Value 'Part of the name of the new file fnam4$ = ActiveWorkbook.Worksheets("Parameters").Range("B6").Value 'Part of the name of the new file fnam5$ = ActiveWorkbook.Worksheets("Parameters").Range("B7").Value fnam6$ = ActiveWorkbook.Worksheets("Parameters").Range("B8").Value ActiveWorkbook.Worksheets("Data").Activate 'This code performs import====================== With Worksheets("Data").QueryTables.Add(Connection:= _ "TEXT;" & fpath$ & fnam$ & fnam4$ & fnam3$ & fnam5$ & fnam6$ _ , Destination:=Range("$A$2")) .Name = "MI_Werk_Overige_Labels20151004_1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 866 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = True .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With ActiveWindow.SmallScroll Down:=-45 Set wb1 = ActiveWorkbook With wb1.Worksheets("Data") a = Range(.Range("CG1"), .Range("A" & .Rows.Count).End(xlUp)).Copy End With With Workbooks.Add(xlWBATWorksheet) 'We create a new xls file .Worksheets(1).Range("A1").PasteSpecial xlValues 'Insert copied values .Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteColumnWidths .SaveAs Filename:="C:UserskDesktopNew folder " & fnam$ & "_" & fnam3$ & "_" & fnam4$ & ".xls" 'Save .Close Msg = "Complete!" 'MsgBox for Complete! statement Style = vbInformation Response = MsgBox(Msg, Style) End With End Sub |