Всем привет, сегодня мы поговорим о том, как можно выгружать данные из Access в такие приложения, как Word и Excel. Но не стандартный метод, который есть в Access (связь с Office), а метод, позволяющий выгружать данные в определенный шаблон и в Word, и в Excel.
Другими словами, это необходимо, когда невозможно или слишком трудоемко создать отчет в Access по уже существующему шаблону, например, в Word. Как известно, отчет в Access может просто отображаться коряво, или, самый распространенный вариант, когда в отчете Access много текста, который не так хорошо отформатирован, как в Word, и нет такого много данных, но отчет должен быть автоматизирован, например, это какие-то договоры, выписки и т.д.
Пользоваться самим вордовским слиянием не очень удобно, поэтому сегодня я расскажу, как можно заливать такие шаблоны прямо из Access нажатием кнопки.
Помимо загрузки в шаблон Word, иногда необходимо выполнить загрузку в шаблон Excel, и этот способ мы сегодня тоже рассмотрим.
Экспорт данных из Access в шаблон Word
Вся разработка делится на две части, это:
- Настройка шаблона Word;
- Настроить загрузку данных в шаблон.
Суть настройки шаблона заключается в размещении необходимых полей в тех местах шаблона, где вы хотите отображать те или иные данные. Это делается с помощью полей формы.
Примечание! Я использую Microsoft Word 2003.
Откройте шаблон Word, сначала добавьте необходимую панель инструментов, для этого нажмите «Вид -> Панель инструментов» и установите флажок «Формы». Теперь у вас отображается панель инструментов Shapes. Все, что осталось сделать, это вставить в места, где вы хотите отображать данные, элементы «Текстовое поле», которые доступны на только что добавленной панели инструментов.
После добавления поля у вас будет серая область, указывающая, что поле было добавлено. Теперь нужно задать имя этого поля, чтобы потом вставлять в него значения из доступа (стандартное имя не очень удобно). Для этого щелкните правой кнопкой мыши поле и выберите «Свойства». В поле маркера введите желаемое имя для этого поля, в примере я назвал его MyTestPole.
Создайте столько полей, сколько вам нужно.
На этом настройка шаблона закончена, рекомендую сделать этот шаблон только для чтения, иначе пользователь возьмет его, сформирует документ и сохранит, а шаблон потеряется, а если вы сделаете его только для чтения, вы не есть такая возможность, просто сохраните через «Сохранить как».
Перейдем к более интересной задаче, это реализация загрузки Access в этом шаблоне на VBA.
Примечание! Я использую Access в связке с MS SQL 2008, поэтому данные буду брать оттуда.
Код VBA для выгрузки данных в шаблон Word
Допустим, у вас есть форма, создайте на ней кнопку (я назвал ее тестовой кнопкой) и вставьте следующий код VBA в событие нажатия кнопки:
Код закомментирован, так что проблем быть не должно. Здесь цель состоит в том, чтобы создать объект word.document и word.application. А дальше мы уже работаем со своими объектами, то есть наполняем их.
Экспорт данных из Access в шаблон Excel
В шаблоне Excel уже не нужно создавать поля как в Word, так как здесь мы уже будем ориентироваться на адреса ячеек.
Заполнить шаблон Excel можно несколькими способами, я опишу два, первый — когда нужно заполнить только несколько полей, то есть в источнике данных будет только одна строка с несколькими столбцами. Второй — когда линий уже несколько и вы точно не знаете сколько (зависит от некоторых условий). В шаблоне по умолчанию для этого отведена пара строк, поэтому мы добавим нужные нам строки, чтобы наши данные не пересекались со строками ниже (допустим, есть примечание, подпись заголовка и т д.). И совет, вот, например, я использую только один источник данных, а вы, если вам нужно заполнить шапку, примечание и определенное количество строк (т.е область данных), можете использовать несколько источников (Recordset).
Код VBA для выгрузки данных в шаблон Excel
Сначала добавьте кнопку на форму (я назвал ее testexcel) и вставьте следующий код в событие «Нажатие кнопки».
Поскольку новая строка будет создана без объединений или значений XLT.Worksheets(«Sheet1»).Rows(Rowss — 1).Copy newrow ‘, это всего лишь пример того, как удалить диапазон в документе ‘XLT. Листы («Лист1»). Range(«A10:F10»).ClearContents ‘динамически генерирует нужный адрес ячейки cell = «a» & Rowss ‘и устанавливает его значение в XLT.Worksheets(«Sheet1»).Range(cell) = numrow cell = «b» & Rowss XLT.Worksheets(«Лист1»).Range(cell) = rsd.Fields(«field5»).Value ‘перейти к следующей строке Rowss = Rowss + 1 ‘перейти к следующей строке в источнике данных rsd .MoveNext Else ‘и это делается до тех пор, пока не закончатся строки, данные в шаблоне’, то есть если в исходнике всего 1 строка, то в коде
Здесь я тоже все подробно обсудил, но если у вас есть вопросы, задавайте их в комментариях к этой статье.
Для справки, я использовал позднюю ссылку здесь при создании объекта для Word.Application и Excel.Application, чтобы не добавлять необходимые библиотеки и обеспечить совместимость.
Надеюсь, мои примеры вам помогут!