Генерация визуальных форм документов из реестра с помощью VBA Excel. Использование массива для передачи данных из реестра в печатную форму (бланк) документа. Ссылка для скачивания файла с примером внизу.
Передача данных из реестра в массив
Порядок генерации документов из реестра с помощью VBA Excel будем рассматривать на примере Договора о материальной ответственности из статьи Реестр документов и печатная форма в Excel, где заполнение бланка (печатной формы) из реестра осуществляется с помощью формул.
Итак, допустим у нас есть следующий реестр:

Мы должны на основании данных из реестра заполнить бланк документа для вывода его на печать. Чтобы идентифицировать конкретный документ, будем использовать активную ячейку, которую выберем в нужной строке и ее номер определим с помощью кода VBA при запуске программы генерации печатной формы документа:
1 |
nomer_stroki = ActiveCell.Row |
Информацию о документе скопируем из реестра в массив, предварительно объявив его без указания размерности:
1 |
massiv = Range(Cells(nomer_stroki, 1), Cells(nomer_stroki, 10)) |
Передача данных из массива в документ
Бланк документа можно хранить в отдельном файле или на скрытом листе книги с реестром, заполнять его данными из массива, а потом копировать в новую книгу. Но для простоты мы будем заполнять тот же бланк, который в статье Реестр документов и печатная форма в Excel заполнялся с помощью формул:

Заполнить печатную форму документа можно, последовательно присваивая отдельным ячейкам значения из соответствующих элементов массива. Но мы сделаем немного по-другому: присвоим заполняемым ячейкам имена, различающиеся только порядковым номером («yacheyka_» с номером от 1 до 11*), и заполним их значениями из массива с помощью цикла. После окончания работы цикла и присвоения значения еще одной отдельной ячейке активируем лист с заполненным бланком документа.
*Имя «yacheyka_11» присвоим ячейке «G41», в которую повторно необходимо записать ФИО.
Вот такой получился код:
1 2 3 4 5 6 7 8 9 10 11 12 |
Private Sub CommandButton1_Click() Dim nomer_stroki As Long, massiv() As Variant, i As Integer nomer_stroki = ActiveCell.Row massiv = Range(Cells(nomer_stroki, 1), Cells(nomer_stroki, 10)) With Sheets("Печать ДМО") For i = 1 To 10 .Range("yacheyka_" & i) = massiv(1, i) Next .Range("yacheyka_11") = massiv(1, 3) .Select End With End Sub |
Размещен код в модуле листа «Реестр ДМО» и запускается кнопкой, размещенной на этом же рабочем листе.
Вы можете скачать файл с примером генерации документов из реестра с данными при помощи кода VBA Excel.