Генерация документов и отчетов из реестра или базы данных Excel с помощью кода VBA для просмотра, анализа и вывода на печать. Создание, заполнение, удаление.
Нет смысла хранить множество документов и отчетов в отдельных файлах, если существуют реестры и базы данных Excel, в которых уже есть вся необходимая информация. Каждый документ или отчет можно сгенерировать с помощью кода VBA в виде временного файла, просмотреть его, проанализировать, распечатать. Затем удалить его, а при необходимости сформировать снова.
Создание документа или отчета из шаблона
Допустим, у нас есть реестр документов или база данных Excel с какой-либо информацией. Чтобы создать документ или отчет и заполнить его данными, необходим его шаблон (печатная форма).
Шаблон создаем вручную на отдельном рабочем листе или с помощью кода VBA при заполнении документа. Способы создания шаблона определяют место его хранения:
- В коде VBA. Такой способ возможен для несложных печатных форм.
- В рабочей книге Excel с реестром или базой данных на скрытом листе.
- В отдельном файле, который не обязательно сохранять как шаблон Excel (*.xlt*).
Я предпочитаю создавать шаблон вручную и хранить его на скрытом листе в книге с реестром или базой данных. Такой способ подходит для подавляющего большинства случаев.
Из редких исключений можно назвать печать ценников на основании товарной накладной, сохраненной в Excel. Шаблон ценника и программный код VBA приходится хранить в отдельном файле, по команде из которого открывается и обрабатывается товарная накладная.
Назовем лист с шаблоном документа или отчета — «Shablon». Для создания новой печатной формы скрытый лист с шаблоном необходимо скопировать:
With Worksheets(«Shablon») .Visible = True .Copy After:=Worksheets(Worksheets.Count) .Visible = False End With |
Данный код вставит новый лист с шаблоном в ту же книгу после всех имеющихся листов. Чтобы шаблон скопировать в новую книгу, заменяем строку .Copy After:=Worksheets(Worksheets.Count)
на .Copy
. Печатная форма откроется в новом файле.
Сразу после создания, обращаться к новому листу можно как к активному (ActiveSheet), даже в том случае, если он скопирован в новую книгу. Чтобы воспользоваться этой возможностью, порядок действий в программе должен быть следующим:
- Копирование информации в переменную массива из реестра или базы данных.
- Создание нового документа или отчета из шаблона.
- Заполнение документа или отчета, обращаясь к нему как к ActiveSheet.
Копирование информации и заполнение формы
Копирование информации
Информация о документе обычно хранится в реестре или базе данных Excel в одной строке. Информация для отчета может располагаться как в одной, так и в нескольких или во многих строках.
Если информация нужна из одной строки, перед запуском кода VBA следует выделить любую ячейку в строке с данными. Тогда в ходе выполнения программы можно будет определить номер строки по активной ячейке и извлечь из нее информацию.
Допустим, что лист называется «Reestr», а необходимая информация расположена в десяти первых ячейках каждой строки:
Dim nomer As Long, massiv() As Variant nomer = ActiveCell.Row massiv = Range(Cells(nomer, 1), Cells(nomer, 10)) |
Если для отчета требуется информация из нескольких строк, можно выделить их вертикально по любому столбцу и использовать следующий код:
Dim nomer1 As Long, nomer2 As Long, massiv() As Variant nomer1 = Selection.Cells(1).Row nomer2 = Selection.Cells(Selection.Cells.Count).Row massiv = Range(Cells(nomer1, 1), Cells(nomer2, 10)) |
В иных случаях, когда для отчета требуется большое количество строк, можно организовать автоматическое выделение диапазона, например, по интервалу дат.
Если требуется обработка данных для отчета, проводим ее в массиве. Для результатов обработки можно объявить еще одну переменную массива.
Создание и заполнение формы
После того как информация скопирована и обработана, создаем из шаблона печатную форму документа или отчета, лист которой после создания будет активным.
Заполняем ячейки печатной формы информацией из массива, обращаясь к листу с формой как к ActiveSheet. Если новый документ или отчет создан в той же книге, ее можно автоматически сохранить:
Чтобы не наблюдать за мерцаниями экрана во время выполнения процедуры VBA Excel, можно временно отключить его обновления:
Sub GeneratsiyaDokumenta() Application.ScreenUpdating = False ———— операторы ———— Application.ScreenUpdating = True End Sub |
Удаление печатной формы
Если лист документа или отчета временно сохраняется в книгу с реестром или базой данных, можно предусмотреть его простое удаление без выведения дополнительного диалогового окна.
Для этого необходимо на лист шаблона правее печатной формы вставить кнопку из коллекции «Элементы управления ActiveX». Дважды кликнуть по ней и в открывшемся модуле листа внутрь автоматически сгенерированного объявления процедуры вставить строку Call UdaleniyeLista
:
Sub CommandButton1_Click() Call UdaleniyeLista End Sub |
Затем в модуль текущей книги добавляем процедуру:
Sub UdaleniyeLista() Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub |
Кнопка вместе с шаблоном будет копироваться в новую печатную форму. При нажатии кнопки активный лист будет удаляться кодом VBA без предупреждения от Excel.
В общем необходимо создать что то типа отчета в Excel с помощью VBA.
Имеется книга Excel. В ней 50 страниц. На каждой страничке располагаетя таблица. Структура таблиц на каждой странице идентична. На каждом листе есть столбец «H» в который заносятся числовые данные. Алгоритм следующий. Рассмотрим таблицу в листе «1». Необходима сделать проверку столбца «H» (допустим проверка столбца «H» с 10-20 строку ). Если например в столбце «H» в строке «14»(клетка H14) найдены числовые данные то эти бы данные копировались на лист «отчет» в клетку A1(причем пустые клетки должны пропускатся). А так же чтобы из листа «1» из строки 14 копировлась клетки A14 и B14 в лист «отчет» соответственно в клетки B1 и C1. Далее например найдены числовые данные (Лист 1) в клетке H17 соответственно данные должны копироватся в Лист «отчет» H17>> A2, A17>> B2, B17>>C2. и т.д. И все это нужно проделать со всеми 50 листами.
Задача не самая трудная. Дело в том что я сам не очень знаком с синтаксисом и функциями VBA поэтому у меня это вызывает затруднения.
Хотя бы объясните на примере 1 листа все остальное сам сделаю.
И еще вопрос можно ли сделать цикл сразу для всей книги. Или надо будет описывать каждую страницу отдельно?
Заранее всем спасибо за ответы.
13 ответов
405
04 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by Maks555
В общем необходимо создать что то типа отчета в Excel с помощью VBA.
Имеется книга Excel. В ней 50 страниц. На каждой страничке располагаетя таблица. Структура таблиц на каждой странице идентична. На каждом листе есть столбец «H» в который заносятся числовые данные. Алгоритм следующий. Рассмотрим таблицу в листе «1». Необходима сделать проверку столбца «H» (допустим проверка столбца «H» с 10-20 строку ). Если например в столбце «H» в строке «14»(клетка H14) найдены числовые данные то эти бы данные копировались на лист «отчет» в клетку A1(причем пустые клетки должны пропускатся). А так же чтобы из листа «1» из строки 14 копировлась клетки A14 и B14 в лист «отчет» соответственно в клетки B1 и C1. Далее например найдены числовые данные (Лист 1) в клетке H17 соответственно данные должны копироватся в Лист «отчет» H17>> A2, A17>> B2, B17>>C2. и т.д. И все это нужно проделать со всеми 50 листами.
Задача не самая трудная. Дело в том что я сам не очень знаком с синтаксисом и функциями VBA поэтому у меня это вызывает затруднения.
Хотя бы объясните на примере 1 листа все остальное сам сделаю.
И еще вопрос можно ли сделать цикл сразу для всей книги. Или надо будет описывать каждую страницу отдельно?
Заранее всем спасибо за ответы.
Например, так:
Sub Report()
Dim curSheet As Worksheet
Dim curRow, targetRow As Integer
targetRow = 1
‘Цикл по всем листам книги
For Each curSheet In Workbooks(«Книга1»).Worksheets
If curSheet.Name <> «Отчет» Then
curSheet.Activate
For curRow = 1 To 10
If IsNumeric(Cells(curRow, 8 ).Value) And Cells(curRow, 8 ).Value <> Empty Then
Worksheets(«Отчет»).Cells(targetRow, 1 ).Value = Cells(curRow, 8 ).Value
Worksheets(«Отчет»).Cells(targetRow, 2 ).Value = Cells(curRow, 1 ).Value
Worksheets(«Отчет»).Cells(targetRow, 3 ).Value = Cells(curRow, 2 ).Value
targetRow = targetRow + 1
End If
Next curRow
End If
Next curSheet
Worksheets(«Отчет»).Activate
End Sub
5.9K
04 февраля 2005 года
Maks555
24 / / 04.02.2005
Цитата:
Originally posted by Dmitrii
Например, так:
Sub Report()
Dim curSheet As Worksheet
Dim curRow, targetRow As Integer
targetRow = 1
For Each curSheet In Workbooks(«Книга1»).Worksheets
If curSheet.Name <> «Отчет» Then
curSheet.Activate
For curRow = 1 To 10
If IsNumeric(Cells(curRow, 8 ).Value) And Cells(curRow, 8 ).Value <> Empty Then
Worksheets(«Отчет»).Cells(targetRow, 1 ).Value = Cells(curRow, 8 ).Value
Worksheets(«Отчет»).Cells(targetRow, 2 ).Value = Cells(curRow, 1 ).Value
Worksheets(«Отчет»).Cells(targetRow, 3 ).Value = Cells(curRow, 2 ).Value
targetRow = targetRow + 1
End If
Next curRow
End If
Next curSheet
Worksheets(«Отчет»).Activate
End Sub
большое спасибо! сейчас буду пытаться что-нибудь сделать!
5.9K
07 февраля 2005 года
Maks555
24 / / 04.02.2005
выдает ошибку несоответствия типов в строке
for each cursheet in workbooks(«книга1»).worksheets
что не так?
и еще вопрос как организовать цикл например чтобы проверка была только с 1 по 10 лист.
275
07 февраля 2005 года
pashulka
985 / / 19.09.2004
— Может быть Ваша рабочая книга имеет имя отличное от «Книга1»
— В некоторых случаях необходимо указывать «Книга1.xls»
—————
For wsIndex = 1 To 10
wsName = Worksheets(wsIndex).Name
Next
For Each iList In Worksheets
If iList.Index > 10 Then Exit For
Next
5.9K
07 февраля 2005 года
Maks555
24 / / 04.02.2005
большое спасибо все работает! теперь буду делат различные прибамбасы
5.9K
10 февраля 2005 года
Maks555
24 / / 04.02.2005
еще несколько вопросиков.
1)как сделать чтобы по услувию менялся цвет ячейки. Например мне нужно если число в ячейки больше 100, то ячейка бы выделялась красный цветом.
2) как сделать очистку ячеек определенного диапазона.
1.2K
10 февраля 2005 года
Штурман
147 / / 01.08.2003
по первому вопросу
Формат -> Условное форматирование
И работает без всяких кодов
5.9K
10 февраля 2005 года
Maks555
24 / / 04.02.2005
Цитата:
Originally posted by Штурман
по первому вопросу
Формат -> Условное форматирование
И работает без всяких кодов
А по подробнее можно? а то я не очень знаком с синтаксисом и функциями.
1.2K
10 февраля 2005 года
Штурман
147 / / 01.08.2003
Цитата:
Originally posted by Maks555
А по подробнее можно? а то я не очень знаком с синтаксисом и функциями.
Да что там объяснять то?
Блин,мужик, ты обленился в дупель.
Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101
Теперь доступно?:x
5.9K
10 февраля 2005 года
Maks555
24 / / 04.02.2005
Цитата:
Originally posted by Штурман
Да что там объяснять то?
Блин,мужик, ты обленился в дупель.
Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101
Теперь доступно?:x
хе:)спасибо конечно! только я хотел узнать как это можно реализовать на VB.
кстати условное форматирование у меня оказалось почему то недоступным
405
10 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by Maks555
хе:)спасибо конечно! только я хотел узнать как это можно реализовать на VB.
кстати условное форматирование у меня оказалось почему то недоступным
Вот примеры:
‘Изменение цвета в ячейке на красный
If Range(«a1»).Value > 100 Then
Range(«a1»).Interior.ColorIndex = 3
End If
‘Очистка диапазона ячеек
Range(«a1:c10»).Clear ‘так
Range(Cells(1, 1), Cells(3, 10)).Clear ‘или так
Вообще вариантов очистки несколько: всё (в примере выше), содержимое, оформление и т.д. Для выбора нужного смотрите описание соответствующих методов объекта Range.
Кстати, действительно, желательно сначала пытаться разобраться самостоятельно. Самый простой способ — запись макроса с помощью макрорекодера и последующий анализ полученного кода.
5.9K
10 февраля 2005 года
Maks555
24 / / 04.02.2005
Цитата:
Originally posted by Dmitrii
Вот примеры:
‘Изменение цвета в ячейке на красный
If Range(«a1»).Value > 100 Then
Range(«a1»).Interior.ColorIndex = 3
End If
‘Очистка диапазона ячеек
Range(«a1:c10»).Clear ‘так
Range(Cells(1, 1), Cells(3, 10)).Clear ‘или так
Вообще вариантов очистки несколько: всё (в примере выше), содержимое, оформление и т.д. Для выбора нужного смотрите описание соответствующих методов объекта Range.
Кстати, действительно, желательно сначала пытаться разобраться самостоятельно. Самый простой способ — запись макроса с помощью макрорекодера и последующий анализ полученного кода.
Большое спасибо за ответ. Буду старатся разобратся самостоятельно.
20K
02 февраля 2007 года
Mimino
18 / / 02.02.2007
Да что там объяснять то?
Блин,мужик, ты обленился в дупель.
Хорошо,ликбез:
1)Выделяем форматируемый столбец(к примеру,если это столбец А,то и щелкаем на букву А,вверху столбца)
2)Открываем меню Форматирование
3)В открывшемся меню выбираем Условное форматирование
4)В первом окошке оставляем слово Значение
5)Во втором окошке выбираем слово больше
6)В третьем окошке ставим цифру 100
7)Нажимаем кнопку Формат
8 )выбираем вкладку Вид
9)выбираем нужный цвет
10)Нажимает две кнопки ОК
11)В отфарматированом столбце в любой ячейке вводим для тестирования цифру 101
Теперь доступно?:x
Всё гениальное — просто. Столько книг по Excel перелопатил, а для таких случаев всегда макросы писал. Оч.полезный совет, спасибо и от меня.
140 / 123 / 50 Регистрация: 10.11.2011 Сообщений: 620 |
|
1 |
|
Сформировать отчет за выбранный период28.12.2012, 10:22. Показов 4739. Ответов 14
Добрый день . Разработал програмку автоматизации отчетов По нажатию на кнопку «Отчет за период» например : выбираем даты с 14.12 по 27.12 выбираем получателя
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
28.12.2012, 10:22 |
14 |
Скрипт 5468 / 1148 / 50 Регистрация: 15.09.2012 Сообщений: 3,514 |
||||
28.12.2012, 10:48 |
2 |
|||
По такому принципу можно сделать: Кликните здесь для просмотра всего текста
Примечания
0 |
140 / 123 / 50 Регистрация: 10.11.2011 Сообщений: 620 |
|
28.12.2012, 11:09 [ТС] |
3 |
Скрипт спасибо Вам ,но я неселен в таких кодах я подкоректировал название листв ,но дальше глухо. Прикрепил новый файл можно доработать если не сложно?
0 |
140 / 123 / 50 Регистрация: 10.11.2011 Сообщений: 620 |
|
28.12.2012, 14:45 [ТС] |
4 |
Скрипт, это Юра по вопросу отчета за период непоможите в решении ?
0 |
Igor_Tr 4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
||||
29.12.2012, 20:39 |
5 |
|||
Вам осталось следующее. 1. Кнопке «сформировать» назначить эту процедуру. 2. Оформить додавание листов с названиями клиентов автоматом, если их нет, в этой же процедуре. 3. Раскрасить, отформатировать, добавить бантики, цветочки. По вкусу, короче. 4. По листам, тоже можно в этой процедуре, выполнить арифметические действия. И все. Если понравится, то спасибо не мне , а Hugo121. Вот это серьйозно.
Добавлено через 6 минут
1 |
140 / 123 / 50 Регистрация: 10.11.2011 Сообщений: 620 |
|
29.12.2012, 21:58 [ТС] |
6 |
Спасибо за помощь Igor_Tr и Hugo121.
0 |
Igor_Tr 4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
||||||||
29.12.2012, 23:27 |
7 |
|||||||
Корректировать не только можно но и нужно. Но сначала разберите до нитки то, что уже у Вас есть, чтоб знать что корректируете. Кидаю еще функцию проверки наличия листа (Уокенбах, или Харрис — не помню).
Добавите в код что-то типа Добавлено через 9 минут
Но основная Ваша проблема будет «вытяжка» (создание) имени листа. Я бы создавал или сразу, как только вношу в форму, или заганял в массив имеющиеся, и проверяд по наличию в массиве. Добавлено через 5 минут
0 |
140 / 123 / 50 Регистрация: 10.11.2011 Сообщений: 620 |
|
29.12.2012, 23:42 [ТС] |
8 |
Создавать имя листа буду сразу в ручную, через масив тяжело , я неочень компетентен в vba. А какова судьба календарика- выбросить …
0 |
Igor_Tr 4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
||||
30.12.2012, 02:36 |
9 |
|||
Вырвался. На пару минут. Женщины. Сделаешь больше — жизни не будет. Сделаешь меньше — ты покойник. Ничего не выбрасывайте. Сделайте что-то рабочее, что не получается — спросите, кто-нибудь поможет. Вы задали себе задачу, требующую как минимум, знания (знакомства с…) половины учебника Уокенбах. Успехов. Добавлено через 1 минуту Добавлено через 9 минут Добавлено через 1 час 39 минут
А еще можно всякого и немерянно. Как в сочинении: «Мама. Она ведь у меня одна.»
0 |
140 / 123 / 50 Регистрация: 10.11.2011 Сообщений: 620 |
|
30.12.2012, 13:36 [ТС] |
10 |
Спасибо за помощь буду изучать, а календарь подождет. На этом тему закрываю. надо обработать имеющуюся информацию.
0 |
Igor_Tr 4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
||||
30.12.2012, 15:39 |
11 |
|||
Для полноты картины. Тут два способа выгрузки массива на лист (есть еще перебор For…next). Пригодится. Посмотрите внимательно. Хочу сэкономить Вам время:
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
02.01.2013, 21:15 |
12 |
Please check your inbox «uzd-d@yandex.ua»
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
25.01.2013, 14:27 |
13 |
Изучал словари и для этого использовал, в том числе, Ваш пример. Кидаю результат. Там и создание кнопки, и массивы, и словари — в общем, Армагедон. Отчеты — по периодах, по фирмах, по сотрудниках. Перед использованием рекомендую прочитать в прилагаемой книге инф-ю на листе «Explanation». Удачи.
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
25.01.2013, 20:28 |
14 |
Вот пример со сводной таблицей, срабатывает при внесении конечной даты.
0 |
Igor_Tr 4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
||||
25.01.2013, 21:06 |
15 |
|||
Нормально. Кстати, была, в начале, идея посоветовать Св.Таблицы и Пром.Итоги. А потом занялся словарями — ну не пропадать трудам ведь. А еще вижу — словари все — таки более универсальны. Не зря время ушло. Добавлено через 23 минуты
А со словарями ничего этого нет. На основном листе добавляйте Респондентов и сотрудников сколько хотите и каких хотите. Немного больше писанины, правда. А дальше — нажал кнопку, получил фактически готовые листы к распечатке, которые всегда будут с «свежими данными». Дальше удаляйте эти листы (кроме основного), сохраняйте, скрывайте, обрабатывайте — голова у Вас не болит, даже если Вы используете раз в пол года. Данные просто перезапишутся свежими. Думаю, это выгоднее, может не так «эффэктно».
0 |
- Что такое приложения Visual Basic (макросы VBA)
- Использование макросов VBA в Excel для создания отчетов
- Понимание переменных, условий и циклов в VBA
- Создание переменных в макросах VBA
- Использование условий в макросах VBA
- Использование циклов в макросах VBA
- Ярлыки
- Пакет инструментов анализа
- Описательная статистика
- Создание гистограммы
- Скользящие средние
- Расширенная генерация случайных чисел
- Создание случайного образца
- Вывод
Что такое приложения Visual Basic (макросы VBA)
VBA — это язык программирования, разработанный Microsoft для использования с офисным пакетом Microsoft, таким как Word, Access, Excel и другие. Он используется для настройки приложений в соответствии с потребностями бизнеса. Это мощный и удобный инструмент для многократного выполнения операции, а также помогает в анализе данных. VBA используется для доступа к функциям приложений и управления ими в некоторых других приложениях. Финансовая отчетность и анализ выполняются эффективным и действенным образом с использованием макросов VBA.
VBA в Excel используется для создания, форматирования и печати отчетов с использованием графических представлений, таких как диаграммы. Отчеты создаются легко и просто с помощью макросов VBA. Отчеты создаются с использованием различных вариантов в соответствии с потребностями руководства.
Использование макросов VBA в Excel для создания отчетов
Чтобы использовать VBA в Excel, убедитесь, что вкладка «Разработчик» присутствует на вкладке «Меню».
Если параметр разработчика недоступен на вкладке «Меню», нажмите кнопку «Office» à «Параметры Excel» à установите флажок «Показать вкладку разработчика» и нажмите кнопку «ОК».
Сделав эту опцию доступной, вы можете начать использовать Visual Basic. На вкладке Разработчик выберите параметр Visual Basic
Нажмите Вставить меню à Параметр формы пользователя
Выберите опцию Label из панели инструментов
Щелкните правой кнопкой мыши на ярлыке, и вы получите диалоговое окно «Свойства», в котором вы можете ввести подпись для ярлыка.
Теперь выберите значок «Текстовое поле» на панели инструментов и оставьте его рядом с полем «Метка». Затем щелкните правой кнопкой мыши на текстовом поле и во всплывающем меню «Свойства» введите имя для текстового поля в свойстве «Имя».
Повторите шаги, чтобы добавить столько меток и текстового поля, которое вы хотите ввести в область формы пользователя.
Теперь выберите опцию Command Button на панели инструментов и поместите ее в форму. Щелкните правой кнопкой мыши и во всплывающем окне свойств введите нужную команду из свойства «Заголовки».
После того, как все данные пользовательского интерфейса введены, вам нужно ввести код для генерации отчета. Чтобы открыть окно кода, дважды щелкните командную кнопку, расположенную в форме.
Перед вставкой кода необходимо установить ссылку, которая поможет вам получить доступ к базе данных VB. Для выбора ссылок Меню Инструменты à Ссылки
В диалоговом окне выберите тип библиотеки, которую вы хотите использовать. На этом рисунке установлен флажок Microsoft ActiveX Data Objects 2.6 Library.
В окне кода введите код, который используется для запуска команды. Код находится между «Private Sub CommandButton1_Click ()» и End Sub.
Вы также можете добавить функции в окно кода, которое используется для генерации отчета.
После ввода кода вам необходимо создать макросы для данных. Перейдите на вкладку «Разработчик» à «Макросы», чтобы использовать меню «Макросы».
Введите имя макроса для отчета и нажмите кнопку «Создать».
Введите код для формы между опцией Sub и End Sub
После того, как все эти шаги сделаны, теперь у вас все готово для запуска отчета.
Для запуска отчета выполните следующие действия:
Нажмите на меню макросов на вкладке разработчика
Выберите имя макроса из списка и нажмите кнопку «Выполнить»
Введите необходимые данные для генерации отчета.
Наконец, отчет генерируется в соответствии с вашими потребностями.
Понимание переменных, условий и циклов в VBA
Сначала давайте посмотрим, что означают все три термина в VBA
Переменная — это небольшая часть системной памяти, которая используется для хранения данных
Условие — это логическая проверка, которую компьютер выполняет для проверки чего-либо
Цикл — это набор инструкций, которым необходимо следовать определенное количество раз
Теперь посмотрим, как использовать все эти три в VBA.
Создание переменных в макросах VBA
Если вы хотите использовать переменную в макросах VBA, сначала вам нужно их создать. DIM — это оператор, который используется для создания любой переменной.
Ниже приведены несколько примеров созданных переменных.
- Dim someNumber As Integer — Это говорит о том, что вы собираетесь использовать некоторую переменную Number для хранения только целочисленных значений. Это используется в VBA как someNumber = 7, что означает, что он хранит 7 в переменной someNumber
- Dim myList (1-10) As String — эта строка означает, что вы хотите использовать список значений в виде String (Text). И размер списка ограничен 10. Это используется как myList (5) = 792, означает, что оно устанавливает значение 5-го элемента в массиве myList равным 792.
- Dim otherNumber As Double
- Dim anotherList () в качестве варианта
- Dim someText As String
- Dim myCells As Range
- Dim myChart As Chart
- Dim aCondition As Boolean
Использование условий в макросах VBA
Все в компьютере включает в себя принятие решений и условия тестирования. Есть много утверждений для проверки условий. Мало что объясняется ниже для вашего понимания
Если тогда заявление
Использование оператора If действительно легко в макросах VBA. Вот пример, чтобы проверить условия покупки
Если наша покупка 6000, то
специальные инструкции для обработки слишком много или слишком мало покупок
конец, если
Остальное заявление
Оператор Else используется, когда условие If не выполнено.
Если наша покупка 6000, то
специальные инструкции для обработки слишком много или слишком мало покупок
еще
Запишите покупки и двигайтесь дальше
конец, если
Использование циклов в макросах VBA
Существует несколько способов написания циклов в VBA. Здесь мы упомянули самый простой тип петли для вашего легкого понимания
Для петли
For Loop используется для повторения набора инструкций для определенного количества раз
Для storeNumber = от 20 до 50
позвонить в магазин
спросите цифры продаж
сделай что-нибудь, если нужно
‘вешать трубку
Следующий магазинNumber
Для каждой петли
Этот тип цикла используется для запуска одинаковых инструкций для каждого из элементов в списке.
Для каждой ячейки в диапазоне («B1: B10»)
cell.value = cell.value + 2
Следующая клетка
Ярлыки
Есть несколько важных ярлыков, которые вы должны знать при использовании VBA в Excel
- ALT + F11 — для просмотра VBA Editor, также известного как VBE
- ALT + F8 — для отображения всех макросов
- ALT + Q: закрыть редактор VBA и вернуться в Excel
- F5: запустить макрос
- F2: Показать объект браузера
- F7: Показать редактор кода
- CTRL + G: открыть немедленное окно
- F1: Показать справку
Пакет инструментов анализа
Analysis ToolPak — это надстройка, которая является встроенной программой по умолчанию в Microsoft Excel. Это инструмент анализа данных, который помогает в анализе финансовых, статистических и инженерных данных. Вы всегда можете сэкономить свое время и энергию с помощью Analysis ToolPak.
Вам просто нужно предоставить данные для анализа, и Analysis ToolPak использует соответствующую функцию макроса и отображает результат в выходной таблице. Они также иногда создают графики вместе с отчетами.
Чтобы загрузить пакет инструментов анализа, выполните следующие простые действия.
Перейдите на вкладку «Зеленый файл» и нажмите «Параметры».
В раскрывающемся списке «Управление» выберите «Надстройки Excel» и нажмите «Перейти».
В диалоговом окне «Надстройки» установите флажок «Analysis ToolPak» и нажмите «ОК».
Если опция Analysis ToolPak недоступна, нажмите «Обзор». Если он доступен, установите флажок напротив параметра «Пакет инструментов анализа» и нажмите «ОК».
Теперь на вкладке «Данные» вы можете нажать «Анализ данных».
Наконец, вы можете выбрать вариант, который вам нужно сделать в Excel. На рисунке ниже гистограмма выбрана для создания гистограммы в Excel для заданных данных.
В пакете Analysis ToolPak доступно всего 19 вариантов анализа данных. Они перечислены ниже
- Anova: однофакторный
- Anova: двухфакторный с репликацией
- Anova: двухфакторный без репликации
- корреляция
- ковариации
- Описательная статистика
- Экспоненциальное сглаживание
- F-тест два образца для дисперсии
- Анализ Фурье
- Гистограмма
- Скользящая средняя
- Генерация случайных чисел
- Ранг и проценты
- регрессия
- отбор проб
- t-тест: два парных образца для средних
- t-тест: две выборки, предполагающие равные отклонения
- t-тест: две выборки, предполагающие неравные отклонения
- Z-тест: два образца для среднего
Немногие из этих методов анализа данных подробно объясняются ниже со скриншотами того же
Описательная статистика
После того как Analysis ToolPak установлен, вы получите диалоговое окно Data Analysis, где у вас есть список вариантов. Выберите Описательную статистику. После выбора этой опции вы получите диалоговое окно, как показано на рисунке ниже
В диалоговом окне вы можете ввести такие данные, как диапазон исходных данных, где должны отображаться результаты и какие результаты должны отображаться. Ниже приведен вывод описательной статистики
Одним из основных недостатков использования параметра «Описательная статистика» является то, что он отображает результат в виде значений, а не в терминах формул. Поэтому, если в исходные данные будут внесены какие-либо изменения, они не будут отражены в выходных данных. Вам нужно сделать весь метод с самого начала.
Создание гистограммы
Гистограмма — это набор значений в определенных диапазонах. Диапазоны известны как бункеры в гистограмме. В том же диалоговом окне «Анализ данных» выберите параметр «Гистограмма». Вы получите диалоговое окно, как показано на рисунке ниже
Вам необходимо ввести такие данные, как диапазон исходных данных, диапазон обозначений бункера и место, где должен отображаться результат. Результат покажет вам распределение данных вместе с параметрами, как показано на рисунке ниже.
Диалоговое окно гистограммы также дает вам возможность создать диаграмму вместе с выводом. Это даст вам легкое понимание.
Скользящие средние
Эта опция поможет вам определить тенденции в последовательных данных. Исходные данные здесь основаны на периодах, и среднее значение всегда рассчитывается для ряда периодов. Ниже приведено диалоговое окно скользящих средних
В этом диалоговом окне вы можете выбрать диапазон исходных данных, шаг интервала и диапазон вывода. Шаг интервала является основным фактором скользящих средних, поскольку выходные данные основаны на этом. Это также дает вам возможность создать диаграмму в выводе, как показано ниже
На этом рисунке вы можете ясно видеть, что 6 ячеек, начиная с D4, не возвращают никакого значения, поскольку мы ввели шаг Интервал как 7.
Расширенная генерация случайных чисел
Это один из параметров в диалоговом окне «Анализ данных». Как только он будет выбран, вы увидите диалоговое окно «Генерация случайных чисел» ниже.
Даже в Excel есть эта опция, но опция генерирования случайных чисел в Analysis ToolPak гораздо более продвинутая, чем в Excel. Здесь вы можете больше контролировать
- Количество переменных
- Количество случайных чисел
- Случайная скорость
В диалоговом окне вы можете увидеть раскрывающийся список, в котором вы можете выбрать тип и параметры распространения для каждого из них.
Создание случайного образца
Одним из параметров в диалоговом окне «Анализ данных» является «Выборка». Нажав на эту опцию, вы увидите другое диалоговое окно, как показано на рисунке ниже.
Статистический анализ в основном делается на выборке населения, а не на всей популяции. Это диалоговое окно дает вам возможность ввести исходные данные о населении и где эти данные должны быть размещены. Вы можете выбрать метод выборки. Если вы выберете периодический метод, вы можете следовать шаблону шага. Если вы выбираете метод Random, вы должны указать количество значений, которые должны быть возвращены.
Этот метод очень прост и может помочь вам мгновенно создать образец.
Вывод
Таким образом, использование VBA для отчетности и анализа является мудрым решением для бухгалтеров и финансовых специалистов, так как сокращает их время и усилия. Он также предоставляет точную информацию в различных формах эффективно и результативно.
Связанные курсы: —
- Базовый курс VBA и макросов
- Продвинутый курс VBA и макросы
- Комплексное обучение VBA и макросам
- Как использовать для каждого цикла в VBA
Отчет Access имеет известные достоинства, такие как простота формирования его структуры и
мощный аппарат компоновки исходных данных. Но есть и неудобства: пользователь для
изменения этого отчета должен вносить изменения в исходные данные базы, или, того хуже, обращаться к Разработчику для внесения поправок (напр. нужен раздел «Кому, от кого»).
Есть еще недостатки, описывать их, думаю, не стоит: понятно.
Предлагается решение:
- Создание локальной исходной таблицы — источника (t3_Sborka).
- Копирование исходных данных отчета в t3_Sborka с мин. преобразованием типов данных
(здесь в t3_Sborka данные сохраняются в поле формата STRING).
… и далее по F1: - Формирование на основе t3_Sborka перекрестного запроса NewQueryDef.
- Вывод в формат Excel NewQueryDef.
-
Уничтожение — NewQueryDef и t3_Sborka.
Я по этой теме уже публиковался на
http://www.cyberforum.ru/ms-access/thread2158558.html
но речь там идет об обратном процессе — о сохранении уже готовых таблиц Excel в БД.
Подробнее на примере БД со схемой БД учета трудоемкости изготовления изделия по заданному технологическому маршруту, где значение записи поля Итог в таблице Маршруты есть трудоемкость изготовления конкретной детали в одном из цехов предприятия. Здесь предлагается рассматривать изделие как простую совокупность входящих деталей и на практике дело намного сложнее, но это уже другая тема.
где такой код Basic :
Dim qdfNew As QueryDef
Dim D, N
Otvet = MsgBox("Обработать данные", vbOKOnly, "Отчеты Excel")
Call Заполнитьt3_Sborka
' Создайте временный QueryDef.
Set qdfNew = CurrentDb.CreateQueryDef("ДеталиОперации", "TRANSFORM Max(t3_Sborka.NCH) AS [Max-NCH] SELECT " _
& "t3_Sborka.NumStroka FROM t3_Sborka GROUP BY t3_Sborka.NumStroka ORDER BY " _
& "t3_Sborka.NumStroka, t3_Sborka.NumStolbec PIVOT t3_Sborka.NumStolbec;")
Call closeProject("Excel") 'закрыть процесс Excel
' Откройте набор записей и распечатайте отчет.
DoCmd.OutputTo acOutputQuery, "ДеталиОперации", "ExcelWorkbook(*.xlsx)", "Таблица.xlsx", True, "", , acExportQualityScreen
' Удалите новый QueryDef, потому что это демонстрация.
CurrentDb.QueryDefs.Delete "ДеталиОперации"
' Удалите источник, потому что это демонстрация.
CurrentDb.TableDefs.Delete "t3_Sborka"
Exit_Кн_Отчеты_Click:
Exit Sub
End Sub
Sub Заполнитьt3_Sborka()
Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, rs3 As DAO.Recordset
Dim NStroka As Long, NStolb As Long
'создать t3_Sborka
CurrentDb.Execute ("CREATE TABLE t3_Sborka (t3Cod COUNTER CONSTRAINT MyFieldConstraint PRIMARY KEY, NumStroka LONG, " _
& "NumStolbec LONG, NCH STRING);")
'три выборки:
Set rs1 = CurrentDb.OpenRecordset("SELECT Детали.КодДетали, Детали.ДецимДетали, Сборки.КолДеталей FROM Детали INNER JOIN Сборки ON " _
& "Детали.КодДетали = Сборки.КодДетали WHERE Сборки.КодИзделия=" & Me.КодИзделия & " ORDER BY Сборки.КодСборки;")
Set rs2 = CurrentDb.OpenRecordset("Цеха")
Set rs3 = CurrentDb.OpenRecordset("t3_Sborka")
<cut/>
'заполнить сетку с данными
NStroka = 0
With rs3
Do Until rs1.EOF
NStroka = NStroka + 1
NStolb = 2
Do Until rs2.EOF
NStolb = NStolb + 1
.AddNew
!NumStroka = NStroka
!NumStolbec = NStolb
!NCH = DLookup("Итог", "Маршруты", "КодДетали=" & rs1!КодДетали & " And КодЦеха=" & rs2!КодЦеха)
.Update
rs2.MoveNext
Loop
rs2.MoveFirst
rs1.MoveNext
Loop
End With
rs2.Close
'заголовки строк
rs1.MoveFirst
NStroka = 0
With rs3
Do Until rs1.EOF
NStroka = NStroka + 1
.AddNew
!NumStroka = NStroka
!NumStolbec = 1
!NCH = rs1!ДецимДетали
.Update
.AddNew
!NumStroka = NStroka
!NumStolbec = 2
!NCH = rs1!КолДеталей
.Update
rs1.MoveNext
Loop
.Close
End With
rs1.Close
Exit_Заполнитьt3_Sborka:
Exit Sub
End Sub
Sub closeProject(proc As String) 'закрыть процесс Excel
Dim Process As Object, i
For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process")
i = i + 1
If Process.Caption Like "*" & proc & "*" Then
Process.Terminate
End If
Next
End Sub
Выдает итоговый отчет
Конечно, в коде заполнения источника t3_Sborka можно предусмотреть и заголовки, и поля итогов. Простор широкий, а получаемый результат, думаю, окупит затраченные усилия.