Перейти к содержимому

VBA Excel. Генерация документов (реестр, массив, бланк)

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

  1. Передача данных из реестра в массив
  2. Передача данных из массива в документ

Передача данных из реестра в массив

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

Итак, допустим у нас есть следующий реестр:

Пример реестра документов
Реестр документов в «Умной таблице» Excel

Мы должны на основании данных из реестра заполнить бланк документа для вывода его на печать. Чтобы идентифицировать конкретный документ, будем использовать активную ячейку, которую выберем в нужной строке и ее номер определим с помощью кода VBA при запуске программы генерации печатной формы документа:

nomer_stroki = ActiveCell.Row

Информацию о документе скопируем из реестра в массив, предварительно объявив его без указания размерности:

massiv = Range(Cells(nomer_stroki, 1), Cells(nomer_stroki, 10))

Передача данных из массива в документ

Бланк документа можно хранить в отдельном файле или на скрытом листе книги с реестром, заполнять его данными из массива, а потом копировать в новую книгу. Но для простоты мы будем заполнять тот же бланк, который в статье Реестр документов и печатная форма в Excel заполнялся с помощью формул:

Договор о материальной ответственности
Договор о материальной ответственности

Заполнить печатную форму документа можно, последовательно присваивая отдельным ячейкам значения из соответствующих элементов массива. Но мы сделаем немного по-другому: присвоим заполняемым ячейкам имена, различающиеся только порядковым номером («yacheyka_» с номером от 1 до 11*), и заполним их значениями из массива с помощью цикла. После окончания работы цикла и присвоения значения еще одной отдельной ячейке активируем лист с заполненным бланком документа.

*Имя «yacheyka_11» присвоим ячейке «G41», в которую повторно необходимо записать ФИО.

Вот такой получился код:

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.