Vba excel создание отчета

Обновлено: 25.11.2022

В общем необходимо создать что то типа отчета в 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 листа все остальное сам сделаю.

И еще вопрос можно ли сделать цикл сразу для всей книги. Или надо будет описывать каждую страницу отдельно?

Заранее всем спасибо за ответы.

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

Здравствуйте! У Вас нет темы по работе с фильтром. Можно проконсультироваться на этот счёт?

Здравствуйте, Сергей!
Задавайте вопрос, постараюсь ответить.

Спасибо, Евгений! Имеется в Excel столбец с включённым автофильтром. Можно ли программно запустить окно фильтра для выбора значений? Т.е. не руками нажимать на иконку фильтра, а заставить окно открываться с помощью макроса. Спасибо за ответ.

Да, это возможно:

Сергей, уточните вопрос: нужно программно нажать кнопки Ok и Отмена или отследить, какая из них была нажата?

Просто отследить, какая кнопка нажата.
По предыдущему вопросу. Я вставил sendkeys… в конец макроса, который запускается при нажатии кнопки на листе. Окно фильтра появляется и тут же закрывается. А как сделать, чтобы окно осталось, и пользователь мог выбрать данные?

Евгений, я разобрался, почему не выводилось окно с фильтром.

Пример отслеживания нажатий кнопки «OK» автофильтра. На нажатие кнопки «Отмена» код не реагирует.

Вставьте в стандартный модуль (в примере — Module1) объявление глобальной переменной и код процедуры для кнопки:

Range("A1").CurrentRegion можно заменить на имя таблицы.

Евгений, а формулу в поле B2 оставлять или её можно удалить?

Можно удалить, если в таблице есть другие формулы. Я изменил код процедуры Worksheet_Calculate() в предыдущем примере, чтобы она не реагировала на изменение формул, а только на нажатие кнопки «OK» автофильтра. Range("A1") — это ячейка с кнопкой фильтра.

Евгений, спасибо за корректировку процедуры. Думаю, в ней и поле myString1 необязательно (и связанная проверка с ним), т.к. пользователь может выбрать все значения.
Но… после команды SendKeys "%" событие Worksheet_Calculate() отрабатывается только один раз :(.

Сергей, событие Worksheet_Calculate() не зависит от команды SendKeys "%" . Ограничение стоит здесь:

Код в процедуре Worksheet_Calculate() срабатывает только когда активна ячейка Range("A1") . Если заменить в этой строке Range("A1") на диапазон строки заголовков таблицы, тогда код будет срабатывать при любой активной ячейке в заголовке.

В переменную myString записывается состояние таблицы до применения фильтра, в переменную myString1 — после применения. Затем их содержимое сравнивается: если они содержат разные значения — значит, фильтр был применен.

Здравствуйте! может я не туда пишу. вопрос
нужно посчитать кол-во строк в столбце «В» (от 100 до 5000) и вставить в формулу вместо 744
table = Range("B2:C744")
спасибо.

В столбце «B» не должно быть пустых ячеек до последней строки таблицы.

Как определить в VBA есть узор в ячейке?

Спасибо за достаточно полную информацию.
Был бы очень вам признателен, если бы вы подсказали:
как изменить ширину блоков верхнего колонтитула.
«Введена слишком длинная строка. Уменьшите число знаков.»
При изменении шрифта с полужирного на обычный всё нормально
воспринимается,
Прошу прощения, если не по адресу.

Добрый день! Никак не могу решить проблему с заблокированным автофильтром на защищенном макросом (нашел на форумах) листе. Подскажите пожалуйста, куда и какую строчку нужно добавить в макрос, чтобы при открытии файла был активен автофильтр:

Добрый день, Владислав!
Замените строку

Добрый день, Евгений!
ОГРОМНОЕ СПАСИБО. :))

Здравствуйте, помогите, пожалуйста, решить задачу((

Разработать программу «Кредитный калькулятор» для расчета выплат по кредиту в условиях начисления процентов по аннуитетной схеме постнумерандо. Форма должна предусматривать ввод:
1) сумма кредита, допустимы 2 знака после запятой;
2) процентная ставка (годовая), допустимы 2 знака после запятой;
3) количество периодов (месяцев), целое положительное число.
Также форма должна содержать две кнопки:
1) «Ok» (выполнить расчет, заполнить лист Excel, освободить форму и закончить работу программы);
2) «Отмена» (освободить форму и закончить работу программы).
На лист Excel следует вывести 5 колонок:
1) номер периода;
2) остаток кредита;
3) сумма процентов за пользование кредитом, подлежащая к оплате;
4) сумма погашения основного долга (кредита);
5) общая сумма выплат за период.
Форма должна быть открыта из макроса «main» и там же освобождена по завершению своего использования. Форма должна содержать только код работы с формой и ввода данных. Логика верификации данных должна быть, по возможности, отделена от кода формы. Бизнес-логика обязательно должна быть отделена от кода формы.

Здравствуйте, Рафия!
С разработкой кредитного калькулятора вам помогут только за плату на бирже фриланса.

Добрый день, Евгений! Я только начинаю работать с VBA. Помогите, пожалуйста, прописать код для автоматического перемещения курсора на ячейку вправо после заполнения предыдущей.

Здравствуйте, Ева! Для перемещения фокуса в ячейку справа код VBA не нужен: используйте для этого клавишу «Tab» или настройте клавишу «Enter» для перехода вправо (Файл >> Параметры >> Дополнительно).

Спасибо за ответ! Да, но это надо делать вручную; речь идёт об автоматическом перемещении курсора.

Получение списка файлов в папке и подпапках средствами VBA

Макрос VBA загрузки списка файлов из папки

Функция FilenamesCollection предназначена для получения списка файлов из папки, с учётом выбранной глубины поиска в подпапках.

Используется рекурсивный перебор папок, до заданного уровня вложенности.
В процессе перебора папок, пути у найденным файлам помещаются в коллекцию (объект типа Collection) для последующего перебора.

К статье прикреплено 2 примера файла с макросами на основе этой функции:

Выпадающий календарь в ячейке (выбор даты на листе Excel)

Выпадающий календарь в ячейке листа Excel

Надстройка samradDatePicker (русифицированная) для облегчения ввода даты в ячейки листа Excel.

Добавляет в контекстное меня ячеек пункт выбора даты, а при выделении ячеек, содержащих дату, справа от ячейки отображает значок календаря.

Поместите файл надстройки из вложения в папку автозагрузки Excel (C:\Program Files\Microsoft Office\OFFICExx\XLSTART).

В контекстном меню ячеек появляется новый пункт - "Выбрать дату из календаря".
Рядом с ячейками, в которые уже введена дата, будет отображаться маленький календарик, щелчок по которому вызовет большой календарь - для выбора даты.

Вставка картинок и изображений в ячейки листа Excel

Требуется макросом поместить изображение (картинку) на лист Excel?

Используйте функцию ВставитьКартинку , которая позволит вам вставить картинку в выбранную ячейку (или диапазон ячеек).

При вызове функции можно задать дополнительные дополнительные параметры, указав, следует ли подгонять картинку (или ячейку) по высоте и ширине.

Если вам требуется вставлять много изображений на лист Excel, - то вам поможет надстройка, позволяющая производить поиск изображений в заданной папке, и производить вставку картинок в ячейки или примечания

Кроме того, надстройка для вставки изображений в Excel умеет загружать картинки из интернета (по ссылкам в таблице Excel)

В этом примере демонстрируются возможные варианты применения функции вставки картинок:

Для обеспечения корректного построения отчетов, содержащих макросы, требуется установить доверие на доступ к объектной модели VBA .

В Microsoft Word 2007 это осуществляется следующей последовательностью действий:


нажать кнопку Office в верхнем левом углу, нажать кнопку "Параметры Word";

выбрать закладку "Центр управления безопасностью", нажать кнопку "Параметры центра управления безопасностью";

выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA ".

В Microsoft Word 2010/2013/2016:

в окне "Параметры Word" выбрать закладку "Центр управления безопасностью", нажать кнопку "Параметры центра управления безопасностью";

выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA ".

Примечание

Начало создания макроса

Макрос для отчетов формата Word

Для того, чтобы создать или просмотреть макрос для отчета формата Word необходимо:

на ленте "Разработчик" в группе "Код" нажать кнопку "Visual Basic" (или сразу нажать Alt+F11). Откроется окно приложения "Microsoft Visual Basic for Application";

В окне "Project – TemplateProject" в дереве открыть узел "TemplateProject - Microsoft Word Objects – ThisDocument";


Если макроса там не будет, его можно создать самостоятельно, введя в данном окне строки начала и конца макроса, а между ними - сам текст макроса:

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)

Внимание!

В Word 2007 закладка «Разработчик» по умолчанию скрыта. Чтобы вывести ее на показ необходимо:


нажать кнопку Office в верхнем левом углу, нажать кнопку "Параметры Word";

на закладке "Основные" в разделе "Основные параметры работы с Word" установить опцию "Показывать вкладку "Разработчик" на ленте"

Макрос для отчетов формата Excel

Для того, чтобы создать или просмотреть макрос для отчета формата Excel, необходимо:

В правой части окна приложения, где приведен код, необходимо перейти к макросу "ПослеВыполненияОтчета".


Внимание!

В Excel 2007 закладка «Разработчик» по умолчанию скрыта. Чтобы вывести ее на показ необходимо:


нажать кнопку Office в верхнем левом углу, нажать кнопку "Параметры Excel";

на закладке "Основные" в разделе "Основные параметры работы с Excel" установить опцию "Показывать вкладку "Разработчик" на ленте"

Макрос "ПослеВыполненияОтчета"

Любой отчет изначально содержит следующий макрос:

Этот макрос будет запускаться после вставки данных в отчет. Он используется в отчетах баз данных, поставляемых с программой. Код по обработке отчета следует вставлять в этот макрос.

Переменные, которые передаются в макрос:

Внимание!

Просмотреть объектную модель Word для разработки макросов в редакторе Visual Basic можно по клавише F2.

Название привязки для макроса

При решении ряда задач средствами программирования бывает удобно оперировать данными привязок отчета. Для этого необходимо:

Ниже описано, как это это делается для привязок разных типов.

Тип привязки: Объект

В отчете такие привязки представлены полями.

Использование названия привязки в коде:

Тип привязки: Список и Фильтр

В отчете такие привязки представлены таблицей.

Использование названия привязки в коде:

Работа с таблицами

В отчетах Business Studio присутствует большое количество таблиц. Поэтому высока вероятность того, что основные задачи будут связаны с их обработкой.

Примеры ключевых функций, которые будут полезны при работы с таблицами, приведены ниже.

Работа с таблицей через название привязки

Работа с таблицей через её номер в документе

При работе с таблицами следует помнить ряд моментов:

Таблицы могут содержать объединенные ячейки. В случае перебора всех строк таблицы может возникнуть ошибка. Чтобы этого не было, необходимо использовать команду игнорирования ошибки:

При получении текста таблицы следует помнить, что полученное значение ячейки так же содержит в себе 2 служебных символа. Для обработки данных ячейки без этих служебных символов следует произвести «очистку» значения. Например:

Приведенная выше информация не является полной для работы с таблицами, а лишь обращает внимание на наиболее возможные ситуации.

Определение направления формирования отчета

Один и тот же отчет Business Studio может рассматриваться из разных мест:

Также могут быть и разные задачи по обработке отчета кодом в зависимости от направления формирования отчета. Для определения направления формирования отчета используются параметры: BSInThread, BSHtml и BSPortal.

Направление формирования отчета BSInThread BSHtml BSPortal
Одиночный файл (Word, Excel) False False False
Пакетное формирование (Word, Excel) True False False
HTML -публикация True True False
Business Studio Portal True True True

Пример использования в коде:

Примечание

Работа со ссылками в отчетах для HTML

Для "нормализации" отображения данных следует сначала использовать следующий код:

Работа с копией отчета, содержащим макрос

При копировании отчета названия всех привязок изменяются.



В случае, если в отчете используется макрос, который "опирается" на названия привязок, то следует помнить, что после копирования такой отчет не сможет формироваться таким же образом как оригинал без дополнительной обработки.

Для корректной работы макроса рекомендуется использование проверки на предмет наличия привязки в отчете.

Пример проверки наличия привязки типа "Список". В документе это закладки.

Определяем название привязки типа "Список", которая представляет нужную таблицу (см. Руководство пользователя → Пример определения названия привязки типа "Список").

Пример проверки наличия привязки типа Объект

Определяем название привязки типа "Объект", которая представляет нужное поле в отчёте (см. статью Руководство пользователя → Пример определения названия привязки типа "Объект").

Примечание

Закладки, не относящиеся к привязкам, например, созданные пользователем самостоятельно, при копировании отчетов не изменяются.

Обращение к данным из базы

Из отчета можно напрямую обращаться к данным из базы бизнес-модели. Это делается двумя способами:

Обращение к параметрам объекта

Обращение к параметрам объекта, от которого был вызван отчет, происходит таким образом:

<СистемноеНазваниеПараметра>− это системное название параметра объекта, которое можно просмотреть в Объектной модели (см. Руководство пользователя → Объектная модель).

Например, при выводе отчета от процесса получить данные названия процесса можно таким образом:

Использование механизма OLE

Механизм OLE предоставляет более широкие возможности по обращению к данным бизнес-модели и выводу этих данных в отчетах по сравнению с обращением просто как данным объекта, от которого был вызван отчет.

Описание механизма OLE подробно описано в главе Руководство технического специалиста → Работа с Business Studio через OLE. Для задействования OLE в отчетах конкретной базы нет необходимости во включении опции "Разрешено использование OLE".

Внимание!

В отчетах при работе с OLE недоступны все методы класса "Система.OleApplication", поскольку в макросе "ПослеВыполненияОтчета" есть аргумент "app", который является приложением Business Studio, а не "Система.OleApplication".

Несколько задач в одном макросе

Бывают ситуации, когда:

В рамках одного отчета необходимо решить более чем одну задачу. Например, форматирование полей типа RTF и вставка столбца в таблицу.

Одну и ту же задачу необходимо применять к разным отчетам. Для этого необходимо скопировать код VBA , который решает поставленную задачу. И будет удобней, если этот код не пересекается с кодами других задач.

В таких случаях каждую решаемую задачу удобно оформлять отдельным макросом. А в ключевом макросе "ПослеВыполненияОтчета" лишь вызывать по очереди нужные макросы. Все эти макросы оформляются в том же окне, где и ключевой макрос и делается так:

Если такие макросы имеют одинаковые части кода, то их тоже можно (и рекомендуется) выносить в отдельные макросы или функции в том же окне с ключевым макросом. Например, функция для определения присутствия в отчете необходимой привязки типа "Список" (см. Работа с копией отчета, содержащим макрос) может быть следующей:

Использование этой функции из макроса может быть таким:

Отладка кода

Разработка макроса, как и любая другая работа, это определенный путь, в котором будут допущены ошибки и будет их исправление. Ошибки могут быть обнаружены сразу или не видны при первом взгляде. Более детально об этом описано в главе Подходы к отладке кода.

Примеры решения задач с использованием макросов

Примеры работы с отчетами при использовании макросов приведены в статье Примеры решения задач.

Для обеспечения корректного построения отчетов, содержащих макросы, требуется установить доверие на доступ к объектной модели VBA .

В Microsoft Word 2007 это осуществляется следующей последовательностью действий:


нажать кнопку Office в верхнем левом углу, нажать кнопку "Параметры Word";

выбрать закладку "Центр управления безопасностью", нажать кнопку "Параметры центра управления безопасностью";

выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA ".

В Microsoft Word 2010/2013/2016:

в окне "Параметры Word" выбрать закладку "Центр управления безопасностью", нажать кнопку "Параметры центра управления безопасностью";

выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA ".

Начало создания макроса

Макрос для отчетов формата Word

Для того, чтобы создать или просмотреть макрос для отчета формата Word необходимо:

на ленте "Разработчик" в группе "Код" нажать кнопку "Visual Basic" (или сразу нажать Alt+F11). Откроется окно приложения "Microsoft Visual Basic for Application";

В окне "Project – TemplateProject" в дереве открыть узел "TemplateProject - Microsoft Word Objects – ThisDocument";



Если макроса там не будет, его можно создать самостоятельно, введя в данном окне строки начала и конца макроса, а между ними - сам текст макроса:

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)

Внимание! В Word 2007 закладка «Разработчик» по умолчанию скрыта. Чтобы вывести ее на показ необходимо:


нажать кнопку Office в верхнем левом углу, нажать кнопку "Параметры Word";

на закладке "Основные" в разделе "Основные параметры работы с Word" установить опцию "Показывать вкладку "Разработчик" на ленте"

Макрос для отчетов формата Excel

Для того, чтобы создать или просмотреть макрос для отчета формата Excel, необходимо:

В правой части окна приложения, где приведен код, необходимо перейти к макросу "ПослеВыполненияОтчета".



Внимание! В Excel 2007 закладка «Разработчик» по умолчанию скрыта. Чтобы вывести ее на показ необходимо:


нажать кнопку Office в верхнем левом углу, нажать кнопку "Параметры Excel";

на закладке "Основные" в разделе "Основные параметры работы с Excel" установить опцию "Показывать вкладку "Разработчик" на ленте"

Макрос "ПослеВыполненияОтчета"

Любой отчет изначально содержит следующий макрос:

Этот макрос будет запускаться после вставки данных в отчет. Он используется в отчетах баз данных, поставляемых с программой. Код по обработке отчета следует вставлять в этот макрос.

Переменные, которые передаются в макрос:

Внимание! Просмотреть объектную модель Word для разработки макросов в редакторе Visual Basic можно по клавише F2.

Название привязки для макроса

При решении ряда задач средствами программирования бывает удобно оперировать данными привязок отчета. Для этого необходимо:

Ниже описано, как это это делается для привязок разных типов.

Тип привязки: Объект

В отчете такие привязки представлены полями.

Использование названия привязки в коде:

Тип привязки: Список и Фильтр

В отчете такие привязки представлены таблицей.

Использование названия привязки в коде:

Работа с таблицами

В отчетах Business Studio присутствует большое количество таблиц. Поэтому высока вероятность того, что основные задачи будут связаны с их обработкой.

Примеры ключевых функций, которые будут полезны при работы с таблицами, приведены ниже.

Работа с таблицей через название привязки

Работа с таблицей через её номер в документе

При работе с таблицами следует помнить ряд моментов:

Таблицы могут содержать объединенные ячейки. В случае перебора всех строк таблицы может возникнуть ошибка. Чтобы этого не было, необходимо использовать команду игнорирования ошибки:

При получении текста таблицы следует помнить, что полученное значение ячейки так же содержит в себе 2 служебных символа. Для обработки данных ячейки без этих служебных символов следует произвести «очистку» значения. Например:

Приведенная выше информация не является полной для работы с таблицами, а лишь обращает внимание на наиболее возможные ситуации.

Определение направления формирования отчета

Один и тот же отчет Business Studio может рассматриваться из разных мест:

Также могут быть и разные задачи по обработке отчета кодом в зависимости от направления формирования отчета. Для определения направления формирования отчета используются параметры: BSInThread, BSHtml и BSPortal.

Направление формирования отчета BSInThread BSHtml BSPortal
Одиночный файл (Word, Excel) False False False
Пакетное формирование (Word, Excel) True False False
HTML -публикация True True False
Business Studio Portal True True True

Пример использования в коде:

Работа со ссылками в отчетах для HTML

Для "нормализации" отображения данных следует сначала использовать следующий код:

Работа с копией отчета, содержащей макрос

При копировании отчета названия всех привязок изменяются.





В случае, если в отчете используется макрос, который "опирается" на названия привязок, то следует помнить, что после копирования такой отчет не сможет формироваться таким же образом как оригинал без дополнительной обработки.

Для корректной работы макроса рекомендуется использование проверки на предмет наличия привязки в отчете.

Пример проверки наличия привязки типа "Список". В документе это закладки.

Определяем название привязки типа "Список", которая представляет нужную таблицу (см. Руководство пользователя → Пример определения названия привязки типа "Список").

Пример проверки наличия привязки типа Объект

Определяем название привязки типа "Объект", которая представляет нужное поле в отчёте (см. статью Руководство пользователя → Пример определения названия привязки типа "Объект").

Примечание. Закладки, не относящиеся к привязкам, например, созданные пользователем самостоятельно, при копировании отчетов не изменяются.

Обращение к данным модели бизнес-архитектуры

Из отчета можно напрямую обращаться к данным модели бизнес-архитектуры. Это делается двумя способами:

Обращение к параметрам объекта

Обращение к параметрам объекта, от которого был вызван отчет, происходит таким образом:

<СистемноеНазваниеПараметра>− это системное название параметра объекта, которое можно просмотреть в Объектной модели (см. Руководство пользователя → Объектная модель).

Например, при выводе отчета от единицы деятельности получить данные названия единицы деятельности можно таким образом:

Использование механизма OLE

Механизм OLE предоставляет более широкие возможности по обращению к данным модели бизнес-архитектуры и выводу этих данных в отчетах по сравнению с обращением просто как данным объекта, от которого был вызван отчет.

Описание механизма OLE подробно описано в главе Руководство технического специалиста → Работа с Business Studio через OLE. Для задействования OLE в отчетах конкретной базы нет необходимости во включении опции "Разрешено использование OLE".

Внимание! В отчетах при работе с OLE недоступны все методы класса "Система.OleApplication", поскольку в макросе "ПослеВыполненияОтчета" есть аргумент "app", который является приложением Business Studio, а не "Система.OleApplication".

Несколько задач в одном макросе

Бывают ситуации, когда:

В рамках одного отчета необходимо решить более чем одну задачу. Например, форматирование полей типа RTF и вставка столбца в таблицу.

Одну и ту же задачу необходимо применять к разным отчетам. Для этого необходимо скопировать код VBA , который решает поставленную задачу. И будет удобней, если этот код не пересекается с кодами других задач.

В таких случаях каждую решаемую задачу удобно оформлять отдельным макросом. А в ключевом макросе "ПослеВыполненияОтчета" лишь вызывать по очереди нужные макросы. Все эти макросы оформляются в том же окне, где и ключевой макрос и делается так:

Если такие макросы имеют одинаковые части кода, то их тоже можно (и рекомендуется) выносить в отдельные макросы или функции в том же окне с ключевым макросом. Например, функция для определения присутствия в отчете необходимой привязки типа "Список" (см. Работа с копией отчета, содержащим макрос) может быть следующей:

Использование этой функции из макроса может быть таким:

Отладка кода

Разработка макроса, как и любая другая работа, это определенный путь, в котором будут допущены ошибки и будет их исправление. Ошибки могут быть обнаружены сразу или не видны при первом взгляде. Более детально об этом описано в главе Подходы к отладке кода.

Примеры решения задач с использованием макросов

Примеры работы с отчетами при использовании макросов приведены в статье Примеры решения задач.

Читайте также: