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

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.

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег [vb] и по окончании кода - [/vb].