Различия

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

Ссылка на это сравнение

ru:creating_user_reports:use_macros_in_reports:work_in_macros [2013/10/16 16:11]
admin [Примеры решения задач с использованием макросов]
ru:creating_user_reports:use_macros_in_reports:work_in_macros [2017/10/16 15:07] (текущий)
Строка 5: Строка 5:
 В Microsoft Word 2007 это осуществляется следующей последовательностью действий: В Microsoft Word 2007 это осуществляется следующей последовательностью действий:
  
-  *нажать кнопку {{ru/use_macros_in_reports/use_macros_in_reports/macros_in_report_1418.png?34x35&nolink}} Office в верхнем левом углу, нажать кнопку "Параметры Word";+  *нажать кнопку {{ru/creating_user_reports/use_macros_in_reports/macros_in_report_1418.png?34x35&nolink}} Office в верхнем левом углу, нажать кнопку "Параметры Word";
   *выбрать закладку "Центр управления безопасностью", нажать кнопку "Параметры центра управления безопасностью";   *выбрать закладку "Центр управления безопасностью", нажать кнопку "Параметры центра управления безопасностью";
   *выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA".   *выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA".
  
-В Microsoft Word 2010:+В Microsoft Word 2010/2013/2016:
  
   *выбрать пункт меню "Файл -> Параметры…";   *выбрать пункт меню "Файл -> Параметры…";
Строка 17: Строка 17:
 == Примечание == == Примечание ==
 VBA - Visual Basic for Applications (Visual Basic для приложений) - упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office. VBA - Visual Basic for Applications (Visual Basic для приложений) - упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office.
-====== ======+==== ==== 
 ===== Начало создания макроса ===== ===== Начало создания макроса =====
  
Строка 30: Строка 31:
   * В окне "Project -- TemplateProject" в дереве открыть узел "TemplateProject  - Microsoft Word Objects -- ThisDocument";   * В окне "Project -- TemplateProject" в дереве открыть узел "TemplateProject  - Microsoft Word Objects -- ThisDocument";
  
-  * В правой части окна приложения, где приведен код будет макрос "ПослеВыполненияОтчета".+  * В правой части окна приложения, где приведен кодбудет макрос "ПослеВыполненияОтчета". 
  
 [{{ ru:creating_user_reports:use_macros_in_reports:startvbaword.png?nolink |Рисунок 1. Вид окна среды VBA при работе с макросом для отчетов формата Word}}] [{{ ru:creating_user_reports:use_macros_in_reports:startvbaword.png?nolink |Рисунок 1. Вид окна среды VBA при работе с макросом для отчетов формата Word}}]
  
 +Если макроса там не будет, его можно создать самостоятельно, введя в данном окне строки начала и конца макроса, а между ними - сам текст макроса: 
 +
 +Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 + 
 +<Текст макроса>
 +
 +End Sub
    
 == Внимание! == == Внимание! ==
Строка 44: Строка 52:
  
   * на закладке "Основные" в разделе "Основные параметры работы с Word" установить опцию "Показывать вкладку "Разработчик" на ленте"   * на закладке "Основные" в разделе "Основные параметры работы с Word" установить опцию "Показывать вкладку "Разработчик" на ленте"
-====== ======+==== ====
  
 ==== Макрос для отчетов  формата Excel ==== ==== Макрос для отчетов  формата Excel ====
  
-Для того, чтобы создать или просмотреть макрос для отчета формата Excel необходимо:+Для того, чтобы создать или просмотреть макрос для отчета формата Excelнеобходимо:
  
   * открыть отчет в Мастере отчетов;   * открыть отчет в Мастере отчетов;
Строка 71: Строка 79:
  
   * на закладке "Основные" в разделе "Основные параметры работы с  Excel" установить опцию "Показывать вкладку "Разработчик" на ленте"   * на закладке "Основные" в разделе "Основные параметры работы с  Excel" установить опцию "Показывать вкладку "Разработчик" на ленте"
-====== ======+==== ====
  
 ===== Макрос "ПослеВыполненияОтчета" ===== ===== Макрос "ПослеВыполненияОтчета" =====
Строка 77: Строка 85:
 Любой отчет изначально содержит следующий макрос: Любой отчет изначально содержит следующий макрос:
  
-<code vb>+<code>
  
 Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
Строка 87: Строка 95:
 </code> </code>
  
-Этот макрос будет запускаться после вставки данных в отчет. Он используется в отчетах шаблонной базы данных, поставляемой с программой. Код по обработке отчета следует вставлять в этот макрос.+Этот макрос будет запускаться после вставки данных в отчет. Он используется в отчетах баз данных, поставляемых с программой. Код по обработке отчета следует вставлять в этот макрос.
  
 Переменные, которые передаются в макрос: Переменные, которые передаются в макрос:
Строка 98: Строка 106:
  
 Просмотреть объектную модель Word для разработки макросов в редакторе Visual Basic можно по клавише F2. Просмотреть объектную модель Word для разработки макросов в редакторе Visual Basic можно по клавише F2.
-====== ======+==== ====
  
 ===== Название привязки для макроса ===== ===== Название привязки для макроса =====
Строка 104: Строка 112:
 При решении ряда задач средствами программирования бывает удобно оперировать данными привязок отчета. Для этого необходимо: При решении ряда задач средствами программирования бывает удобно оперировать данными привязок отчета. Для этого необходимо:
  
-  - Знать названия привязки.+  - Знать название привязки.
   - Связать переменные в коде VBA с этим названием.   - Связать переменные в коде VBA с этим названием.
  
-Ниже представлено как это это делается для разного типа привязок.+Ниже описанокак это это делается для привязок разных типов.
  
 **Тип привязки: Объект** **Тип привязки: Объект**
Строка 113: Строка 121:
 В отчете такие привязки представлены полями. В отчете такие привязки представлены полями.
  
-Узнать название в шаблоне отчета: см. [[ru/manual/report/insert_anchor]], статья [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_объект | Пример определения названия привязки типа "Объект"]].+Узнать название в шаблоне отчета: см. статью [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_объект|Пример определения названия привязки типа "Объект"]].
  
 Использование названия привязки в коде: Использование названия привязки в коде:
  
-<code vb>+<code>
    
 ПеременнаяВКоде = Application.ActiveDocument.Variables.Item("НазваниеПривязки").Value ПеременнаяВКоде = Application.ActiveDocument.Variables.Item("НазваниеПривязки").Value
Строка 127: Строка 135:
 В отчете такие привязки представлены таблицей. В отчете такие привязки представлены таблицей.
  
-Узнать название в шаблоне отчета: см. [[ru/manual/report/insert_anchor]], статья [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список |Пример определения названия привязки типа "Список"]].+Узнать название в шаблоне отчета: см. статью [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список|Пример определения названия привязки типа "Список"]].
  
 Использование названия привязки в коде: Использование названия привязки в коде:
  
-<code vb>+<code>
      
 Set ТаблицДляОбработки = Application.ActiveDocument.Bookmarks("НазваниеПривязки").Range.Tables(1) Set ТаблицДляОбработки = Application.ActiveDocument.Bookmarks("НазваниеПривязки").Range.Tables(1)
Строка 140: Строка 148:
 ===== Работа с таблицами ===== ===== Работа с таблицами =====
  
-Отчеты Business Studio имеют четкую структуру и в них присутствует множество таблиц. Поэтому высока вероятность того, что основные задачи будут связаны с их обработкой.+В отчетах Business Studio присутствует большое количество таблиц. Поэтому высока вероятность того, что основные задачи будут связаны с их обработкой.
  
 Примеры ключевых функций, которые будут полезны при работы с таблицами, приведены ниже. Примеры ключевых функций, которые будут полезны при работы с таблицами, приведены ниже.
Строка 146: Строка 154:
 **Работа с таблицей через название привязки** **Работа с таблицей через название привязки**
  
-<code vb>+<code>
  'переменная для работы с конкретной таблицей  'переменная для работы с конкретной таблицей
 Set Table = Application.ActiveDocument.Bookmarks("НазваниеПривязки").Range.Tables(1) Set Table = Application.ActiveDocument.Bookmarks("НазваниеПривязки").Range.Tables(1)
Строка 160: Строка 168:
 **Работа с таблицей через её номер в документе** **Работа с таблицей через её номер в документе**
  
-<code vb>+<code>
  
 сountTables = ActiveDocument.Tables.Count 'количество таблиц в документе сountTables = ActiveDocument.Tables.Count 'количество таблиц в документе
Строка 178: Строка 186:
   * Таблицы могут содержать объединенные ячейки. В случае перебора всех строк таблицы может возникнуть ошибка. Чтобы этого не было,  необходимо использовать команду игнорирования ошибки:   * Таблицы могут содержать объединенные ячейки. В случае перебора всех строк таблицы может возникнуть ошибка. Чтобы этого не было,  необходимо использовать команду игнорирования ошибки:
  
-<code vb>+<code>
 On Error Resume Next ' игнорирование <error 5991> - ячейки таблицы имеют вертикальное объединение On Error Resume Next ' игнорирование <error 5991> - ячейки таблицы имеют вертикальное объединение
    
Строка 185: Строка 193:
   * При получении текста таблицы следует помнить, что полученное значение ячейки так же содержит в себе 2 служебных символа. Для обработки данных ячейки без этих служебных символов следует произвести «очистку» значения. Например:   * При получении текста таблицы следует помнить, что полученное значение ячейки так же содержит в себе 2 служебных символа. Для обработки данных ячейки без этих служебных символов следует произвести «очистку» значения. Например:
  
-<code vb>+<code>
  
 СellText = Selection.Tables(1).Cell(3,2).Range.Text 'текст ячейки со служебными символами СellText = Selection.Tables(1).Cell(3,2).Range.Text 'текст ячейки со служебными символами
Строка 193: Строка 201:
 </code> </code>
  
-Приведенная выше информация является не полной для работы с таблицами, а лишь обращает внимание на наиболее возможные ситуации.+Приведенная выше информация не является полной для работы с таблицами, а лишь обращает внимание на наиболее возможные ситуации. 
 ===== Определение направления формирования отчета ===== ===== Определение направления формирования отчета =====
  
Строка 199: Строка 208:
  
   * одиночный документ  Word или Excel или несколько документов,   * одиночный документ  Word или Excel или несколько документов,
-  * HTML-публикатор,+  * HTML-публикация,
   * Business Studio Portal.   * Business Studio Portal.
  
-При рассмотрение такого отчета в разных местах есть свои нюансы.  Например, отчеты в HTML-публикаторе и Business Studio Portal не содержат колонтитулов, которые есть в отчете, сделанным отдельным документом Word.+При рассмотрение такого отчета в разных местах есть свои нюансы.  Например, отчеты в HTML-публикации и Business Studio Portal не содержат колонтитулов, которые есть в отчете, сделанным отдельным документом Word.
  
-Аналогичным образом могут быть и разные задачи по обработке отчета кодом в зависимости от направления формирования отчета. Для определения направления формирования отчета используются параметры: BSInThread, BSHtml и BSPortal.+Также могут быть и разные задачи по обработке отчета кодом в зависимости от направления формирования отчета. Для определения направления формирования отчета используются параметры: BSInThread, BSHtml и BSPortal.
  
 <startTableBox> <startTableBox>
-^ Направление формирования отчета ^ BSInThread ^BSHtml ^BSPortal ^+ Направление формирования отчета   BSInThread   BSHtml   BSPortal  ^
 | Одиночный файл (Word, Excel) |  False  |  False  |  False  | | Одиночный файл (Word, Excel) |  False  |  False  |  False  |
 | Пакетное формирование (Word, Excel) |  True  |  False  |  False  | | Пакетное формирование (Word, Excel) |  True  |  False  |  False  |
Строка 215: Строка 224:
    
 Пример использования в коде: Пример использования в коде:
-<code vb>+<code>
  
 Dim HTMLCreate As Boolean Dim HTMLCreate As Boolean
Строка 233: Строка 242:
  
 == Примечание == == Примечание ==
-При формировании отчета типа HTML (HTML-портал, Business Studio Portal) так же происходит формирование и отдельного файла типа Word. +При формировании отчета типа HTML (HTML-публикация, Business Studio Portal) так же происходит формирование и отдельного файла типа Word. 
-====== ======+==== ==== 
 ===== Работа со ссылками в отчетах для HTML ===== ===== Работа со ссылками в отчетах для HTML =====
  
-При обработке кодом VBA отчета, сформированного для HTML-публикатора или Business Studio Portal, следует помнить, что после формирования отчета представляет собой отображение не тех данных, что видны в браузере, а документ с показом кодов полей. Это не позволяет вести обработку гиперссылок.+При обработке кодом VBA отчета, сформированного для HTML-публикации или Business Studio Portal, следует помнить, что после формирования отчет представляет собой отображение не тех данных, что видны в браузере, а документ с показом кодов полей. Это не позволяет вести обработку гиперссылок.
  
 Для "нормализации" отображения данных следует сначала использовать следующий код: Для "нормализации" отображения данных следует сначала использовать следующий код:
  
 <codevb> <codevb>
-  
 ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes 'Alt+F9 - видим не коды полей, а значения ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes 'Alt+F9 - видим не коды полей, а значения
-  
 </code> </code>
  
Строка 261: Строка 269:
 **Пример проверки наличия привязки типа "Список".** В документе это закладки. **Пример проверки наличия привязки типа "Список".** В документе это закладки.
  
-Определяем название привязки типа "Список", которая представляет нужную таблицу(см. [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список ]])+Определяем название привязки типа "Список", которая представляет нужную таблицу (см. [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список|Пример определения названия привязки типа "Список"]]).
  
-<code vb>+<code>
  
 BookmarkName = "Изменения_процесса_e1ded8b0" 'название привязки BookmarkName = "Изменения_процесса_e1ded8b0" 'название привязки
Строка 296: Строка 304:
 **Пример проверки наличия привязки типа Объект** **Пример проверки наличия привязки типа Объект**
  
-Определяем название привязки типа "Объект", которая представляет нужное поле в отчёте(см. [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_объект]])+Определяем название привязки типа "Объект", которая представляет нужное поле в отчёте (см. статью [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_объект|Пример определения названия привязки типа "Объект"]]).
  
-<code vb>+<code>
  
 VarName = "Статус_процесса_c9a10e8d" 'название привязки VarName = "Статус_процесса_c9a10e8d" 'название привязки
Строка 326: Строка 334:
 </code> </code>
  
- == Примечание ==+== Примечание ==
 Закладки, не относящиеся к привязкам, например, созданные пользователем самостоятельно, при копировании отчетов не изменяются. Закладки, не относящиеся к привязкам, например, созданные пользователем самостоятельно, при копировании отчетов не изменяются.
-====== ======+==== ====
  
 ===== Обращение к данным из базы ===== ===== Обращение к данным из базы =====
Строка 337: Строка 345:
   - Через использование механизма OLE.   - Через использование механизма OLE.
  
-====Обращение к параметрам объекта====+==== Обращение к параметрам объекта ==== 
 Обращение к параметрам объекта, от которого был вызван отчет, происходит таким образом: Обращение к параметрам объекта, от которого был вызван отчет, происходит таким образом:
  
Строка 346: Строка 355:
   * "ob" - объект, от которого был вызван отчет;   * "ob" - объект, от которого был вызван отчет;
  
-  * <СистемноеНазваниеПараметра> − это системное название параметра объекта, которое можно просмотреть в Объектной модели (см. [[ru/manual/report/object_model]]).+  * <СистемноеНазваниеПараметра> − это системное название параметра объекта, которое можно просмотреть в **Объектной модели** (см. [[ru/manual/manual]] -> [[ru/manual/report/object_model]]).
  
 Например, при выводе отчета от процесса получить данные названия процесса можно таким образом: Например, при выводе отчета от процесса получить данные названия процесса можно таким образом:
  
-<code vb>+<code>
  
    Name = ob.Название  'получаем Название объекта, от которого вызвали отчет     Name = ob.Название  'получаем Название объекта, от которого вызвали отчет 
Строка 356: Строка 365:
 </code> </code>
  
-====Использование механизма OLE==== +==== Использование механизма OLE ==== 
-Механизм OLE предоставляет более широкие возможности по обращению к данным бизнес-модели и выводу этих данных в отчетах по сравнению с обращению просто как данным объекта, от которого был вызван отчет.+Механизм OLE предоставляет более широкие возможности по обращению к данным бизнес-модели и выводу этих данных в отчетах по сравнению с обращением просто как данным объекта, от которого был вызван отчет.
  
-Описание механизма OLE подробно описано в главе [[ru/technical_manual/work_via_ole]]. +Описание механизма OLE подробно описано в главе [[ru/technical_manual/technical_manual]] -> [[ru/technical_manual/work_via_ole]]. 
 Для задействования OLE в отчетах конкретной базы нет необходимости во включении опции "Разрешено использование OLE".  Для задействования OLE в отчетах конкретной базы нет необходимости во включении опции "Разрешено использование OLE". 
  
-==Внимание! ==  +== Внимание! ==  
-В отчетах при работе с OLE недоступны все методы класса "Система.OleApplication". Поскольку в макросе "ПослеВыполненияОтчета" есть аргумент "app", который является приложением Business Studio, а не "Система.OleApplication". +В отчетах при работе с OLE недоступны все методы класса "Система.OleApplication", поскольку в макросе "ПослеВыполненияОтчета" есть аргумент "app", который является приложением Business Studio, а не "Система.OleApplication". 
-===== =====+==== ==== 
 ===== Несколько задач в одном макросе ===== ===== Несколько задач в одном макросе =====
  
 Бывают ситуации, когда: Бывают ситуации, когда:
   - В рамках одного отчета необходимо решить более чем одну задачу. Например, форматирование полей типа RTF и вставка столбца в таблицу.   - В рамках одного отчета необходимо решить более чем одну задачу. Например, форматирование полей типа RTF и вставка столбца в таблицу.
-  - Одну и ту же задачу необходимо применять к разным отчетам. Для этого необходимо скопировать код VBA, который решает поставленную задачу. И будет удобней если этот код не пересекается с кодами других задач.+  - Одну и ту же задачу необходимо применять к разным отчетам. Для этого необходимо скопировать код VBA, который решает поставленную задачу. И будет удобнейесли этот код не пересекается с кодами других задач.
   - Отладку кода удобно вести по одной из задач, на время отключив выполнение других задач.   - Отладку кода удобно вести по одной из задач, на время отключив выполнение других задач.
  
-В таких случаях каждую решаемую задачу удобно оформлять отдельным макросом. А в ключевом макросе "ПослеВыполненияКода" лишь вызывать по очереди нужные макросы. Все эти макросы оформляются в том же окне, где и ключевой макрос и делается так: +В таких случаях каждую решаемую задачу удобно оформлять отдельным макросом. А в ключевом макросе "ПослеВыполненияОтчета" лишь вызывать по очереди нужные макросы. Все эти макросы оформляются в том же окне, где и ключевой макрос и делается так: 
-<code vb>+<code>
 Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
  
Строка 393: Строка 403:
 </code> </code>
  
-Если такие макросы имеют одинаковые части кода, то их тоже можно (и рекомендуется) выносить в отдельные макросы или функции в том же окне с ключевым макросом. Например, функция для определения присутствия в отчете необходимой привязки типа список (см.  [[#работа_с_копией_отчета_содержащим_макрос|Работа с копией отчета, содержащим макрос]]) может быть следующей:+Если такие макросы имеют одинаковые части кода, то их тоже можно (и рекомендуется) выносить в отдельные макросы или функции в том же окне с ключевым макросом. Например, функция для определения присутствия в отчете необходимой привязки типа писок(см. [[#работа_с_копией_отчета_содержащим_макрос|Работа с копией отчета, содержащим макрос]]) может быть следующей:
  
-<code vb>+<code>
 Function BookmarkIs(BookmarkName As String) As Boolean Function BookmarkIs(BookmarkName As String) As Boolean
  
Строка 419: Строка 429:
  
 Использование этой функции из макроса может быть таким: Использование этой функции из макроса может быть таким:
-<code vb>+<code>
 Sub MacrosN () Sub MacrosN ()
  
Строка 432: Строка 442:
  
 ===== Отладка кода ===== ===== Отладка кода =====
-Разработка макроса, как и любая другая работа, это определенный путь, в котором будут допущены ошибки и будет их исправление. Ошибки могут быть обнаружены сразу или не видны при первом взгляде. Более детально в статье [[/ru/creating_user_reports/use_macros_in_reports/debug]].+Разработка макроса, как и любая другая работа, это определенный путь, в котором будут допущены ошибки и будет их исправление. Ошибки могут быть обнаружены сразу или не видны при первом взгляде. Более детально об этом описано в главе [[/ru/creating_user_reports/use_macros_in_reports/debug]]. 
 + 
 +===== Примеры решения задач с использованием макросов =====
  
-=====Примеры решения задач с использованием макросов===== 
 Примеры работы с отчетами при использовании макросов приведены в статье [[/ru/creating_user_reports/use_macros_in_reports/examples]]. Примеры работы с отчетами при использовании макросов приведены в статье [[/ru/creating_user_reports/use_macros_in_reports/examples]].
 +
 ===== Ресурсы по VBA ===== ===== Ресурсы по VBA =====
  
Строка 442: Строка 454:
   *[[http://msdn.microsoft.com/ru-ru/library/office/ee814737(v=office.14).aspx|http://msdn.microsoft.com]] - Начало работы с VBA в Excel 2010   *[[http://msdn.microsoft.com/ru-ru/library/office/ee814737(v=office.14).aspx|http://msdn.microsoft.com]] - Начало работы с VBA в Excel 2010
   * [[https://www.google.ru/?q=vba#q=vba|http://google.com]]   * [[https://www.google.ru/?q=vba#q=vba|http://google.com]]
 +
 +
 +
 +
 +
 +[<contextnavigator>]
 +
Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki