Vba создание файла excel - IT Справочник
Llscompany.ru

IT Справочник
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba создание файла excel

Макрос на VBA Excel – Формируем документы по шаблону

Очень часто бывает такое, что нужно сформировать документы по определенному шаблону, на основе каких-то данных, например, по каждому сотруднику или по каждому лицевому счету. И делать это вручную бывает достаточно долго, когда этих самых сотрудников или лицевых счетов много, поэтому сегодня мы рассмотрим примеры реализации таких задач в Excel с помощью макроса написанного на VBA Excel.

Немного поясню задачу, допустим, нам необходимо сформировать какие-то специфические документы по шаблону массово, т.е. в итоге их получится очень много, как я уже сказал выше, например, по каждому сотруднику. И это нужно сделать непосредственно в Excel, если было бы можно это сделать в Word, то мы бы это сделали через «Слияние», но нам нужно именно в Excel, поэтому для этой задачи мы будем писать макрос.

Мы с Вами уже выгружали данные по шаблону через клиент Access из базы MSSql 2008 в Word и Excel вот в этой статье — Выгрузка данных из Access в шаблон Word и Excel. Но сейчас допустим, у нас данные располагаются в базе, в клиенте которой нельзя или слишком трудоемко реализовать такую задачу, поэтому мы просто выгрузим необходимые данные в Excel и на основе таких данных по шаблону сформируем наши документы.

В нашем примере мы, конечно, будем использовать простой шаблон, только для того чтобы это было просто наглядно и понятно (только в качестве примера), у Вас в свою очередь шаблон будет, как мне кажется намного сложней.

Напомню, что на данном сайте тема VBA Excel уже затрагивалась, например, в материале – Запрет доступа к листу Excel с помощью пароля

И так приступим!

Пишем макрос на VBA Excel по формированию документов

Реализовывать нашу задачу будем на примере «Электронной карточке сотрудника» (я это просто придумал:), хотя может такие и на самом деле есть), т.е. документ в котором хранится личные данные сотрудника вашего предприятия, в определенном виде, именно в Excel.

Примечание! Программировать будем в Excel 2010.

И для начала приведем исходные данные, т.е. сами данные и шаблон

Данные.

Лист, на котором расположены эти данные так и назовем «Данные»

Шаблон.

Лист, на котором расположен шаблон, тоже так и назовем «Шаблон»

Далее, нам необходимо присвоить имена полей для вставки, так более удобней к ним обращаться чем, например, по номеру ячейки.

Это делается очень просто, выделяете необходимую ячейку или диапазон, и жмете правой кнопкой мыши и выбираете «Присвоить имя», пишите имя ячейки и жмете «ОК»

Свои поля я назвал следующим образом:

  • ФИО – fio;
  • № — number;
  • Должность – dolgn;
  • Адрес проживания – addres;
  • Тел. № сотрудника – phone;
  • Комментарий – comment.

Код макроса на VBA Excel

Для того чтобы написать код макроса, открывайте на ленте вкладку «Разработчик», далее макросы.

Примечание! По умолчанию данной вкладке в Excel 2010 может и не быть, чтобы ее отобразить нажмите правой кнопкой по ленте пункт меню «Настройка ленты»

затем, в правой области поставьте галочку напротив пункта «Разработчик»

После вкладка разработчик станет отображаться на ленте.

Далее, когда Вы откроете вкладку разработчик и нажмете кнопку «Макросы» у Вас отобразится окно создания макроса, Вы пишите название макросы и жмете «создать».

После у Вас откроется окно редактора кода, где собственно мы и будем писать свой код VBA. Ниже представлен код, я его как обычно подробно прокомментировал:

Теперь осталось выполнить этот макрос, для этого откройте вкладку разработчик->макросы->выполнить наш макрос:

и после выполнения у Вас в той же папке появится вот такие файлы

Вот с таким содержимым:

Для удобства можете на листе с данными создать кнопку и задать ей событие выполнить наш только что созданный макрос, и после чего простым нажатием выполнять этот макрос. Вот и все! Удачи!

Макрос создания текстовых файлов по таблице Excel

Макрос предназначен для создания текстовых файлов в кодировке UTF-8.

Исходными данными является таблица Excel из 12 столбцов.

Сначала, макрос создаёт папку для будущих текстовых файлов.
Папка создаётся в том же каталоге, где расположена книга Excel.

Далее, для каждой строки таблицы, макрос формирует подпапку,
используя в качестве её названия текст из 7-го столбца таблицы.

И потом, когда папка для файла создана, макрос создаёт текстовый файл с содержимым из 10 столбца таблицы,
и сохраняет его под именем, взятым из второго столбца той же таблицы Excel.
После создания файла, у него меняется кодировка на UTF-8 (изначально, при создании, файлы имеют кодировку Unicode)

По окончании работы макроса, открывается папка, содержащая созданные текстовые файлы.

Пример макроса смотрите в прикреплённом файле.

Код макроса, создающего папки, подпапки, и текстовые файлы по данным из таблицы Excel:

  • 52450 просмотров

Комментарии

Спасибо автору за идею макроса. Вы не могли бы подсказать, а можно ли его усложнить, чтобы перенести все строки таблицы Эксель в виде колонок в текстовые файлы. (те чтобы каждая строка Эксель файла переносилась бы в виде столбца в новый текстовый файл) Полагаю, что править нужно следующую часть макроса ts.Write Trim(arr(i, 10)) путем использования Application.Transpose применительно к строке, мучаюсь никак не могу правильно построить команду.

Здравствуйте, Наталья
Ограничений по текстовым файлам никаких нет
Если файл пустой, — скорее всего, макрос не все данные с листа собирает для вывода в файл.
Если сами не разберётесь, — могу написать макрос под заказ.

Здравствуйте пользуюсь вашим макросом, подскажите, существуют ли ограничения при формировании текстового файла? Столкнулась с тем что файл после формирования пуст или вставлена часть данных которые идут в начале, может ли это быть из-за того что в ячейках excel содержатся большие количества символов, около 240 в каждой и ячеек 26 шт? В чем еще может быть причина?

как сделать перенос строк, подскажите плиз

Здравствуйте, Никита.
Где почитать — не знаю (я в гугле обычно ищу, и читаю)
Можно поискать похожие макросы в инете, и доработать под свою задачу.
Можно заказать написание макроса, — сделаем под заказ.

Добрый день!
Подскажите пожалуйста, где почитать инфу для решения задачи:
Есть таблица Excel #1, количество строк около 2000 тысяч.
Нужно чтобы автоматически создавались отдельные файлы Excel по каждой строке из таблицы Excel #1.

Здравствуйте, Александр
Да, могу и такой макрос сделать, — оформляйте заказ через сайт с примером исходного файла и примером результата.

Здравствуйте, макрос очень полезен! Спасибо!

А не могли бы вы такой же макрос сделать, но только чтобы файлы создавались по столбцам, а имя бралось из первой строки. То есть все что написано в столбце А2:A100, попадало в файл с именем как в А1. И ещё бы хорошо было, чтобы макрос вставлял до первой пустой ячейки.

Наталья, можно сделать как угодно, — макросы могут всё)
Оформляйте заказ, — сделаем.

Подскажите, а мог бы макрос формировать файлы с данными не из одной строки Excel, а из нескольких опираясь на общий признак, например по группам? Например: есть группа чай и в нее входят поля из четырех строк Excel, нужно чтобы все они присутствовали в одном файле и над ними первой строкой была бы шапка «Шапка+название группы». Файл Excelя будет отсортирован по этому признаку, в нем не будет более 500 строк.
Пример:
«Шапка чай »
супер чай для всех
супер пупер чай для каждого
быстрый чай
не очень быстрый чай

Читать еще:  Vba excel очистить лист

возможно неверно выразился. я все экспериментировал с Filename$ = Folder$ & Trim(arr(i, 2)) & «.txt»
для того, чтобы из столбца и уникальной ячейки выходило с номером. Т.е. имея данные столбце: товар А, товар Б, товар В получать на выходе файлы типа: 1.товар А, 2.товар Б, 3.товар В
как такое провернуть?
буду благодарен за ответ)

Дмитрий, вместо строки

Подскажите, пожалуйста, как сделать так, чтобы файлы еще и нумеровались? ну или либо нумерацию из первого столбца брал.

Set ts = FSO.CreateTextFile(Filename$, True, True)
txt = Trim(arr(i, 10)) ‘Данные в файл из ячейки 10-го столбца
txt = Replace(txt, vbNewLine, vbCrLf) ‘ заменяем Последовательность символов перехода на новую строку на Сочетание символов возврата каретки и перевода строки.
txt = Replace(txt, vbLf, vbCrLf) ‘ заменяем Символ перевода строки на Сочетание символов возврата каретки и перевода строки.
ts.Write txt ‘ Пишем текстовое значение в файл
ts.Close

Текстовый формат таблицы (он же CSV) не поддерживает переносы строк внутри значений.
Можно, например, заменять символы переводы строки внутри значений на какой-нибудь символ типа точки с запятой.

для этого замените код

Огромное тебе спасибо мил человек! Все работает изюмительно!
Подскажи только, как сделать так, чтобы данные как многострочный текст сохранялись, ибо в ячейке текст многострочный http://joxi.ru/xAeGVebtY6MJVm. Иначе он их склеивает
http://joxi.ru/J2bej5bc4Yg83m
Заранее благодарю!

Вопрос снят. Справилась.

Спасибо за макрос! А если мне надо что бы
ts.Write Trim(arr(i, 10)) ‘ данные в файл — из ячейки 10-го столбца
несколько раз вставлялись в файл С НОВОЙ СТРОКИ, т.е. визуально располагаясь друг под другом?
Есть такая возможность?

Добрый день. Очень нужна помощь. У меня в Excel в качестве разделителя целой и дробной части стоит точка. Но когда я посредством макроса экспортирую данные в txt формат, точка становится запятой. Как это можно предотвратить?
Дописано: Я понимаю, что можно в блокноте заменить «.» на «,», но у меня куча этих файлов, так что это не вариант. Надо как-то в макросе это изобразить.
Спасибо.

В коде написано:

Соответственно, если в некоторых строках в 10-м столбце пусто — то и файл пустой будет создан

спасибо за макрос, работает, создает файлы около 100 шт
но первые 10 корректные, а остальные пустые.
Можете подсказать как исправить?

Василий, если у вас мои макросы не работают, — это только потому, что вы их не можете правильно применить
У меня всё всегда работает на отлично)

Если даже для вас ценность этого макроса невелика, — то я, тем более, не вижу смысла тратить на него свое время.
Вы мне хотите сказать, что этот макрос нужнее мне, чем вам?))
PS: А трафика мне на сайте хватает)

1. я не то чтобы не могу в них разобраться, те макросы, что вы предложили попросту не работают у меня, ни один, ни второй. Что получилось у меня после их применения я выложил на Яндекс.Диск — это даже не критика, а просто так скажем «сообщение об ошибке администратору»

2. задача, с которой я к вам обратился относится к категории «удобная добавка», то есть то же самое делается вручную за 15 секунд, то есть ценность её, скажем так, невелика. Просто реализовав её вы могли бы привлечь дополнительный трафик к себе на сайт, то есть выгода для вас тоже имеется. А вот платить за неё я не вижу никакого смысла — и так, честно говоря, жаль времени, потраченного на поиски её решения

Если вы сами не можете разобраться в моих макросах, — не вопрос, я могу сам все сделать как надо, — но это уже не бесплатно
Если хотите бесплатно, — обратитесь на форумы по Excel, выложите там свои наработки, — и вам помогут.

мой предыдущий ответ видимо оказался слишком мудрёным 🙂 а жаль.

спасибо за желание помочь, но боюсь, что это что-то не то
если я правильно всё понимаю, то приведённый вами код состоит из 2 частей:

1. макрос, который если его запустить в открытом в Excel файле .csv перекодирует данный файл в utf-8 без BOM. Не знаю почему, но у меня он не работает.

Делаю ровно следующее — есть простенькая таблица в Excel, сохраняю её как .csv, запускаю макрос, файл закрывается. Если его после этого открывать хоть Excel хоть Notepad++, то там абракадабра в одну строчку, при этом Notepad++ как показывал в оригинальном файле кодировку ANSI, так и показывает его в новом файле.

2. функция, которая перекодирует заданный .csv в нужную кодировку. То есть допустим можно сохранить свою таблицу Excel в .csv, указать путь к данному файлу на диске и функция поменяет кодировку данного файла

во-первых, непонятно что указывать в аргументе SourceCharset
во-вторых, если SourceCharset не указыавать, то получается абракадабра в одну строчку как в случае выше, хотя тут уж Notepad++ соглашается, что кодировка стала utf-8 без BOM
в-третьих, изначальная задача звучала совсем по-другому, а именно

«есть табличка Excel в формате, допустим .xlsx. При нажатии на макрос, он сохраняет данную табличку в той же папке, но в формате .csv, причём .csv этот в кодировке utf-8 без BOM» (собственно, возможность указать кодировку при сохранении .csv есть в OpenOffice Calc, но любимый Excel почему-то не может себе это позволить. )

когда я искал, как это можно реализовать, все отвечавшие либо предлагали делать это вручную, либо давали ссылку на вашу статью http://excelvba.ru/code/Encode но эта статья не содержит в себе решения на задачу выше, она только позволяет перекодировать уже готовый .csv — в принципе получается всё тот же ручной способ

в общем, думаю, если получится реализовать вариант как в OpenOffice Calc или вариант проще, то есть без выбора папки для сохранения (можно отдельную статью этому посвятить, кстати), то приток дополнительных посетителей из нуждающихся вебмастеров к вам на сайт обеспечен. А сайт, кстати, очень крутой, прям не верится, что он российского происхождения.

дабы не быть голословным по поводу не рабочести макросов прилагаю все использованные и получившиеся материалы http://yadi.sk/d/Svq04uDVPXHdv

Здравствуйте, Василий.
Макрос и кнопка при всём желании в CSV не сохранятся, — CSV это текстовый формат.

Макрос можно упростить, — если сохранять весь файл в CSV
Если вы вручную сохранили файл в формате CSV, — в макросе достаточно будет 3 строк:
(сам макрос можно сохранить в личной книге макросов, и запускать по нажатию горячей клавиши)

Читать еще:  Как изменить размер шрифта в excel

Здравствуйте! Чувствую, что в этом макросе есть всё что нужно для моей задачи, но как его вычленить знаний не хватает.

А требуется очень простое, но с другой стороны очень нужное для вебмастеров действие (в инете обыскался — куча вопрошающих, ноль отвечающих): сохранить текущий .xls в .csv в кодировке «utf-8 без ВОМ», а нужно это для импорта на сайт данных из excel.

Каждый раз менять кодировку csv в блокноте утомительно, а так будет быстрее (а я правильно понимаю, что макрос и кнопка его запуска сами удалятся из csv?)

Удалось сделать то, что мне нужно благодаря этому вашему макросу http://excelvba.ru/code/ExtendArray Объединил оба проекта, получил пусть неоптимизированный, зато рабочий макрос 🙂 Результат здесь: http://zalil.ru/34769096 Спасибо за ваши работы, очень выручили 🙂

Уважаемый администратор! Спасибо за помощь, только это не совсем то, что мне нужно 🙂 Мне нужно писать данные из первого столбца не в название файла, а в сам файл. Допустим у меня в первом столбце имеются строки: 34,35,36. В во втором столбце соответственно строки 11, 12, 12. На выходе я хотел бы получить соответственно 2 файла txt: Первый будет называться «11» и в нем будут данные: «34», а второй будет называться «12» и в нем будут данные: «35/36». Заранее спасибо за помощь! 🙂

Замените в коде эту строку

PS: знак «/» нельзя использовать в имени файла, — потому разделителем поставил символ «-«

Немного модифицировал ваш макрос под себя, но кое-что не могу сделать. У меня имеется 2 столбца с числами. Мне нужно формировать текстовые файлы с названиями из 2 столбца, в них писать данные из первого столбца. Это делается хорошо. Но если во 2 столбце число совпадает с предыдущем, то создается файл с таким же названием и он перезаписывает прошлый файл. А мне нужно чтобы туда дописывалось число из первого столбца через знак «/». Например 123456/789012. Как это сделать?

Такому не учат нигде — можно только самому научиться, если есть интерес к программированию.

Супер. Это просто праздник какой-то! Где этому учат? Всё работает как нужно.

Excel VBA: Создать файл xls, вставить в него данные, закрыть и .

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 4

1 Тема от -red- 2012-02-24 15:51:57

  • -red-
  • Разработчик
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Тема: Excel VBA: Создать файл xls, вставить в него данные, закрыть и .

. обратиться к нему как к БД через ADO.

Проблема в том что создаваемый файл xls не должен появляться на экране. Кострукция типа:

Выводит на экран файл и всё тут

Для ясности напишу зачем я это делаю.
Есть задача отобразить данные из MS SQL сервера, при условиях:
1. Доступ к БД через интернет (достаочно медленный) — количество запросов должно быть сведено к минимуму.
2. Данные в БД хранятся в «сыром» т.е. бинарном виде — требуется преобразовать эти данные в привычную человеку форму.
3. В один из столбцов в БД пишется дата (формат DateTime) нужно вывести 3 вида отчета — дневной, месячный и годовой.

Дневной вид отчета делается легко: запрос с between, на лету из RecordSet данные конвертирую в человеческий формат. А вот месячный и годовой, решил сделать так: Сначала такой же запрос как и в дневном (только период дат побольше), потом копирование всего этого хозяйства в локальную таблицу, потом обращение к этой таблице как к БД через ADO с группировкой по месяцу или году и вуаля.
. но тут блин выскакивает на экран новый файл и как с ним боротться не знаю

Сейчас буду копать в сторону встроенных процедур на сервере с БД

2 Ответ от JSman 2012-02-24 21:42:13

  • JSman
  • Администратор
  • Неактивен
  • Рейтинг : [ 33 | 0 ]

    Re: Excel VBA: Создать файл xls, вставить в него данные, закрыть и .

    Может быть стоит запускать это из WSH?

    3 Ответ от Xameleon 2012-02-25 00:05:35

    • Xameleon
    • Модератор
    • Неактивен
    • Рейтинг : [ 36 | 0 ]

      Re: Excel VBA: Создать файл xls, вставить в него данные, закрыть и .

      1) А вы книгу же не закрываете. По крайней мере в коде я этого не вижу.

      2) Может стоит всё таки оптимизировать сам запрос к серверу или страницу выдачи информации ? На чём серверная часть собрана PHP / ASP ? Или её нет ? И все обращения делаются через механизмы самого SQL сервака ?

      3) Думаю стоит связаться по ICQ. Удобнее будет. 252505765

      Vba создание файла excel

      Есть файлы *.htm их надо открывыть в Excel2000 для последующей автоматической обработки посредствам VBA.
      Если открывать Workbooks.Open Filename:= _»имя файла» из существующего документа exсel то файл открывается в новом автоматически создающемся документе excel. Возможно ли сделать так, чтобы файл открывался не в новом созданном документа, а на второй странице существующего?
      Мне в голову приходит только такой вариант: открыть файл из текущего документа , затем из нового созданной документа excel скопировать данные этого файла в старый документ exсel и закрыть новый созданный. — Может есть какой нибудь более правильный/умный способ?

      Можно ли открыть в одном и том же документе excel несколько файлов и чтобы они присутствовали в нём одновременно?

      Как средствами VBA для открытия файлов не задавать точное имя файла (Workbooks.Open Filename:= _»имя файла» ), а вызвать диалоговое окно типа стандартного для открытия файлов — Файл->Открыть ?

      Почему при открытии файла Файл->Открыть некторые числа файла в Excel’e отображаются как Дата — май.43 , а при открытии через VBA Workbooks.Open Filename:= _» все чесла отображаются нормально?

      ВВ
      1. без добавления новой книги, можно считывать данные на прямую из закрытой книги эту функцию можешь посмотреть и доработать Ссылка на ячейки другой книги в этой же директории без указания полного пути (http://forum.ixbt.com/topic.cgi?id=23:29699) (что будет непонятно обращайся помогу)
      или как вариант открываем как обычно потом копируем лист нужный, и закрываем исходный файл
      (ну этот вариант ты уже и сам увидел)

      2. вызов диалогового окна

      Добавление от 29.10.2005 17:49:

      это проблема с десятичным разделителем для русской раскладки это «,» для английской «.» (вроде так )
      вообщем когда ты открываешь и считываешь с десятичным разделителем точка, то Excel расценивает это как дату, если бы была запятая все было бы ок.
      мне твой вариант повторить не удалось с разным открытием что так что так открывалось одинаково

      V3
      1. без добавления новой книги, можно считывать данные на прямую из закрытой книги эту функцию можешь посмотреть и доработать
      Ещё непопробовал. Данные возможно считывть только из закрытой книги excel? Из закрытого файла *.htm их тоже возможно считывать, если доработать функцию?

      2. вызов диалогового окна
      Нехочет у меня эта процедура работать ругается на FileDialog — user-defined type not defined. Надо какие то библиотеки подключать? Или прототипы библиотечных функций писать?

      Добавление от 30.10.2005 20:47:

      C датами как то странно, несовсем понял. Excel файлы по какому то разному методу открывает: если вручную Файл->Открыть — то даты получаются вместо чисел, а если на VBA Workbooks.Open Filename:= то всё нормально.
      Поменял в настройках(Язык и стандарты) запятую на точку и всё стало нормально и при открытии через Файл->Открыть. Только это всё будет использоваться на разных компах. хотел бы добиться полной автоматизированности — без инструкций юзерам — «Поменяйте там то на то то. «

      но лучше наверно попробовать сходу считывать данные без открытия и подменять разделитель
      или когда считали данные их уже обработать

      Есть ли какая нибудь стандартная функция которая конвертит дату в число? — только нормальное число которое было в оригинальном файле, а не то что excel выдаёт если поменять формат ечейки с даты на числовой.

      P.S. Делаю всё в Win2K Excel2000

      ВВ
      1. можно и из html брать, только надо смотреть как организовать это дело или как просто чтение из текстового файла. Та функция что по ссылки с html работать не будет

      2. Упсс извени не посмотрел твою версию Excel
      FileDialog появился с версии 2002, поэтому предыдущими версиями не поддерживается
      тебе надо использовать
      object.GetOpenFilename (фильтр файла, идекс фильтра, заголовок, подпись кнопки, множественный выбор)
      набирал с листа так сказать, поэтому могут быть синтаксические помарки поправь если что

      Добавление от 30.10.2005 21:43:

      ВВ
      как вариант добавить макрос на открытие книги чтобы искал и точку заменял на запятую (ИМХО может есть проще)

      Добавление от 31.10.2005 03:51:

      Исправил не большую ошибку, и немного расширил пример чтобы было понятнее
      В данном примере кода нельзя использовать выделения файлов с Ctrl и Shift (т.е. сразу несколько) для этого надо изменить немного

      По поводу точки/запятой может быть надо проверять версию Excel (русская/английская)

      Спасибо за ответы!

      V3
      1. Решил пойти всё же первым варинатом — открыть и оттуда скопировать.

      2.

      Хотел только ещё указать каталог в котором открывать через ChDir, но неполучилось

      3. как вариант добавить макрос на открытие книги чтобы искал и точку заменял на запятую (ИМХО может есть проще)

      Если я поставлю макрос полсе того как открою: Workbooks.Open Filename:= , то он уже непоможет, так как уже будут даты. А как его поставить на открытие книги?

      Добавление от 31.10.2005 09:28:

      да я и ошибки то незаметил, опечатка только strig вместо string

      11.4 Коллекция Workbooks и объект Workbook, их свойства и методы

      Объект Excel.Workbook, программная работа с книгами Excel из VBA, создание и открытие книг Excel

      Следующий по иерархии после Application объект в объектной модели Excel — это объект Workbook, который представляет книгу Excel. Можно сказать, что объект Workbook занимает в Excel примерно то же место, что и объект Document в Word — он нужен для получения ссылки на нужную нам книгу в наборе открытых книг Excel, а также для настройки общих свойств и выполнения общих действий со всеми листами книги. Получить этот объект можно очень просто:

      • первый способ — воспользоваться коллекцией Workbooks, которая доступна через свойство Workbooks объекта Application. Впрочем, применять это свойство совершенно не обязательно — коллекция Workbooks в Excel и так постоянно доступна. Найти нужную книгу в этой коллекции можно по ее имени или номеру в коллекции:
      • второй способ — использовать свойство Application.ActiveWorkbook. При помощи этого свойства мы обращаемся к активной в настоящей момент книге:
      • третий способ — использовать свойство Application.ThisWorkbook. При этом мы обращаемся к той книге, которой принадлежит данный программный модуль:

      На практике чаще всего нам нужно либо создать в Excel новую книгу, либо открыть существующую книгу (или другой файл в формате, который понимает Excel, например, DBF). Для этой цели используются методы Add() и Open() соответственно. Например, создать новую книгу в Excel можно так:

      Dim oWbk As Workbook

      Set oWbk = Workbooks.Add()

      Единственный необязательный параметр, который принимает этот метод — имя шаблона, на основе которого создается новая рабочая книга.

      Открытие существующей книги выглядит так:

      Dim oWbk As Workbook

      Set oWbk = WorkBooks.Open(«C:mybook1.xls»)

      Помимо стандартных, в коллекции Workbooks предусмотрено также три специальных метода:

      • OpenDatabase() — открыть базу данных, выполнить к ней запрос (или открыть таблицу/представление напрямую), а результаты запроса поместить как импортированные внешние данные в новую автоматически созданную рабочую книгу Excel;
      • OpenText() — почти то же самое, но в качестве источника здесь выступает текстовый файл. Дополнительные параметры позволяют определять его формат.
      • OpenXML() — в качестве источника данных будет выступать файл в формате XML.

      Как и метод InsertDatabase() в Word, эти методы следует использовать только в самых простых случаях. Рекомендуется по возможности использовать более мощные и стандартные средства объектной модели ADO.

      Теперь о самых важных свойствах объекта Workbook — самой рабочей книги:

      • Name, CodeName, FullName — разные имена этой книги. Самое простое имя — Name, это имя совпадает с именем файла книги. FullName — это имя файла книги вместе с полным путем к нему в операционной системе. CodeName — как эта книга будет называться в коде. CodeName можно посмотреть в окне Project Explorer или, если открыть свойства книги в окне Properties, кодовое имя книги будет представлено в строке (Name). Все три свойства доступны только для чтения, менять их можно другими способами (например, сохраняя файл под другим именем или прямо в окне Properties).

      Определенное отношение к именам имеет также свойство Path (путь к файлу книги) .

      • Charts, Sheets, ActiveChart, ActiveSheet, CustomViews, BuiltinDocumentProperties и CustomDocumentProperties, Windows, WebOptions возвращают одноименные коллекции соответствующих объектов. Некоторые из этих объектов будут рассматриваться ниже.
      • ConflictResolution — как будут разрешаться конфликты изменения данных, если книга открыта несколькими пользователями сразу (shared workbook). Есть возможность сделать так, чтобы локальный пользователь автоматически выигрывал, автоматически проигрывал или возникало диалоговое окно с возможностью разобраться в конфликте вручную. Существует большое количество свойств, которые позволяют настроить параметры совместной работы с книгой, но по причине того, что такая работа не рекомендуется (данные для совместного доступа необходимо переносить в базу данных), рассматриваться они здесь не будут, за исключением:
        • запрещать/разрешать общий доступ к рабочей книге можно при помощи методов SaveAs() или ExclusiveAccess();
        • по умолчанию возможность совместного редактирования для книги отключена (проверить можно при помощи свойства MultiUserEditing);
        • получить список всех пользователей (а также когда они открыли файл и в каком режиме) можно при помощи свойства UserStatus.
      • FileFormat — формат книги (доступен напрямую только для чтения, можно изменять при сохранении). Форматов очень много: множество версий Excel, DBF, Lotus 1-2-3, форматы TXT, CSV, XML — всего несколько десятков.
      • свойство Names возвращает коллекцию всех именованных диапазонов в данной рабочей книге. Получить информацию о всех именованных диапазонах в данной книге можно, например, так:

      For Each Item In ThisWorkbook.Names

      Это свойство удобно использовать для предварительных проверок для устранения потенциальных ошибок времени выполнения.

      Методов у объекта Workbook также очень много, однако значения самых употребимых — Activate(), Close(), Save(), SaveAs(), PrintOut(), Protect() и Unprotect() очевидны и действуют аналогично одноименным методам объекта Document в Word.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector