Печать бланков из списка в Excel
Печать бланков из списка в Excel
Очень легко научимся из любого списка Excel делать неограниченное количество бланков (форм, анкет, документов) с помощью макросов VBA.
Задача
Распечатать Карты диспансерного наблюдения (форма 030/у) для стоматологической клиники на n пациентов из списка Excel.
Дано
ПК с MS Office 2016 (неважно какой)
Сам список в формате Excel
Форма 030/у (есть в общем доступе)
Решение
Условно план работы такой:
сначала создаем шаблон бланка и вставляем туда ссылки на нужные ячейки, затем просто перебираем (обновляем из списка) бесконечно много раз (итераций) эти строчки шаблона.
Вот такой список у нас есть - здесь, в принципе, имеются почти все поля, которые должны быть в нашем бланке (карте диспансерного наблюдения форма 030/у). Сохраняем наш список в формате xlsm, т.к. только в этом формате можно засунуть туда макросы (кстати в старых версиях MS Office макросы сохранялись в формате xls).
В исходном файле ФИО пациентов было написано в нижнем регистре, чтобы написать первую букву каждого слова в ячейке Excel с большой буквы используем формулу:
=ЗАМЕНИТЬ(I2;1;1;ПРОПИСН(ПСТР(I2;1;1)))
В нашем файле (уже сохраненном в формате xlsm) создаем ещё две вкладки:
"Настройки" (для управления макросом)
"Форма 030у" (сам бланк)
Вкладка "Настройка"
В ячейке E9 - будет начальная строка для вставки в бланк, а ниже в Е10 - конечная строка.
Таким образом, задав начало и конец циклу печати бланков, можно будет оставить наш файл (пока тот отправляет готовые бланки на принтер) и пойти попить кофе.
А в 15 и 16 строки будем копировать строки из нашего списка.
Ну и всякие приколюли, типа большой кнопки для запуска, подсчета кол-ва листов (Е11).
Вкладка "Форма 030у"
Здесь будет шаблон формы, в которую будет вставляться наши значения из строк вкладки "Настройки".
Поскольку наш бланк маленький (Карта диспансерного наблюдения) - на полиста А4, то на одном листе будет два бланка - поэтому и строки для вставки за раз - две штуки.
Слева - лицо бланков, справа - зад(няя часть). Оборот сзади всегда будет пустой, поэтому его напечатаем после всего, просто так.
Соответствие полей формы настраиваем простой формулой, например, поле диагноза бланка соответствует ячейки Настройка!N15.
И так по аналогии все нужные поля в обоих бланках.
Создаем сам макрос
Есть много способов, мне нравится такой: внизу слева шмакаем на квадратик. В диалоге нажимаем "Ок"
Открывается встроенный в каждый Office редактор макросов Microsoft Visual Basic for Application (VBA)
Копируем и вставляем туда этот простой макрос
‘ Очищаем строки (можно и без этого, но так правильнее)
Worksheets(«Настройка»).Range(«A15:Z16»).ClearContents‘ Объявляем переменные
Dim fr, lr, i
‘ Первая строка
fr = Sheets(«Настройка»).Cells(9, 5).Value
‘ Последняя
lr = Sheets(«Настройка»).Cells(10, 5).Value‘ Цикл перебора строк
For i = fr To lr‘ Копируем 2 новые строки
Worksheets(«Список»).Rows(i).Copy Worksheets(«Настройка»).Rows(15)
Worksheets(«Список»).Rows(i + 1).Copy Worksheets(«Настройка»).Rows(16)‘ Печать — отправляем на принтер
Worksheets(«Форма 030у»).PrintOut
‘ Маленькая пауза, чтобы не забить память принтера
Application.Wait Time:=Now + TimeValue(«0:00:10»)‘ прибавляем 1 — т.к. идем по два
i = i + 1
Next i
Нажимаем вверху на дискету "Сохранить" и закрываем редактор макросов.
Выходим на лист "Настройки", нажимаем на большую кнопку (вставленную фигуру) и выбираем "Назначить макрос".
У нас он только один "Макрос1".
Всё готово.
Работает очень просто:
Макрос берет строку, указанную в ячейке Е9 листа "Настройки" и копирует с листа "Список" в "Настройки" в строку 15. Аналогично со следующей строкой (т.к. идём по два).
Затем значения из этих двух строк автоматом по формулам встают на лист с бланком "Форма 030у" в нужные ячейки и этот лист отправляется на печать.
Цикл повторяется с начала.
Любое использование материалов — только с обязательным указание сайта koozmin.ru
Однако!