Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
ru:creating_user_reports:use_macros_in_reports:work_in_macros [2014/06/16 16:14] barinova |
ru:creating_user_reports:use_macros_in_reports:work_in_macros [2017/10/16 15:07] (текущий) |
||
---|---|---|---|
Строка 9: | Строка 9: | ||
*выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA". | *выбрать закладку "Параметры макросов", в разделе "Параметры макросов для разработчика" установить опцию "Доверять доступ к объектной модели проектов VBA". | ||
- | В Microsoft Word 2010: | + | В Microsoft Word 2010/2013/2016: |
*выбрать пункт меню "Файл -> Параметры…"; | *выбрать пункт меню "Файл -> Параметры…"; | ||
Строка 85: | Строка 85: | ||
Любой отчет изначально содержит следующий макрос: | Любой отчет изначально содержит следующий макрос: | ||
- | <code vb> | + | <code> |
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) | Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) | ||
Строка 121: | Строка 121: | ||
В отчете такие привязки представлены полями. | В отчете такие привязки представлены полями. | ||
- | Узнать название в шаблоне отчета: см. статью [[ru/manual/manual]] -> [[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 | ||
Строка 135: | Строка 135: | ||
В отчете такие привязки представлены таблицей. | В отчете такие привязки представлены таблицей. | ||
- | Узнать название в шаблоне отчета: см. статью [[ru/manual/manual]] -> [[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) | ||
Строка 154: | Строка 154: | ||
**Работа с таблицей через название привязки** | **Работа с таблицей через название привязки** | ||
- | <code vb> | + | <code> |
'переменная для работы с конкретной таблицей | 'переменная для работы с конкретной таблицей | ||
Set Table = Application.ActiveDocument.Bookmarks("НазваниеПривязки").Range.Tables(1) | Set Table = Application.ActiveDocument.Bookmarks("НазваниеПривязки").Range.Tables(1) | ||
Строка 168: | Строка 168: | ||
**Работа с таблицей через её номер в документе** | **Работа с таблицей через её номер в документе** | ||
- | <code vb> | + | <code> |
сountTables = ActiveDocument.Tables.Count 'количество таблиц в документе | сountTables = ActiveDocument.Tables.Count 'количество таблиц в документе | ||
Строка 186: | Строка 186: | ||
* Таблицы могут содержать объединенные ячейки. В случае перебора всех строк таблицы может возникнуть ошибка. Чтобы этого не было, необходимо использовать команду игнорирования ошибки: | * Таблицы могут содержать объединенные ячейки. В случае перебора всех строк таблицы может возникнуть ошибка. Чтобы этого не было, необходимо использовать команду игнорирования ошибки: | ||
- | <code vb> | + | <code> |
On Error Resume Next ' игнорирование <error 5991> - ячейки таблицы имеют вертикальное объединение | On Error Resume Next ' игнорирование <error 5991> - ячейки таблицы имеют вертикальное объединение | ||
Строка 193: | Строка 193: | ||
* При получении текста таблицы следует помнить, что полученное значение ячейки так же содержит в себе 2 служебных символа. Для обработки данных ячейки без этих служебных символов следует произвести «очистку» значения. Например: | * При получении текста таблицы следует помнить, что полученное значение ячейки так же содержит в себе 2 служебных символа. Для обработки данных ячейки без этих служебных символов следует произвести «очистку» значения. Например: | ||
- | <code vb> | + | <code> |
СellText = Selection.Tables(1).Cell(3,2).Range.Text 'текст ячейки со служебными символами | СellText = Selection.Tables(1).Cell(3,2).Range.Text 'текст ячейки со служебными символами | ||
Строка 224: | Строка 224: | ||
Пример использования в коде: | Пример использования в коде: | ||
- | <code vb> | + | <code> |
Dim HTMLCreate As Boolean | Dim HTMLCreate As Boolean | ||
Строка 252: | Строка 252: | ||
<codevb> | <codevb> | ||
- | |||
ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes 'Alt+F9 - видим не коды полей, а значения | ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes 'Alt+F9 - видим не коды полей, а значения | ||
- | |||
</code> | </code> | ||
Строка 271: | Строка 269: | ||
**Пример проверки наличия привязки типа "Список".** В документе это закладки. | **Пример проверки наличия привязки типа "Список".** В документе это закладки. | ||
- | Определяем название привязки типа "Список", которая представляет нужную таблицу (см. [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список]]). | + | Определяем название привязки типа "Список", которая представляет нужную таблицу (см. [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список|Пример определения названия привязки типа "Список"]]). |
- | <code vb> | + | <code> |
BookmarkName = "Изменения_процесса_e1ded8b0" 'название привязки | BookmarkName = "Изменения_процесса_e1ded8b0" 'название привязки | ||
Строка 306: | Строка 304: | ||
**Пример проверки наличия привязки типа Объект** | **Пример проверки наличия привязки типа Объект** | ||
- | Определяем название привязки типа "Объект", которая представляет нужное поле в отчёте (см. статью [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_объект]]). | + | Определяем название привязки типа "Объект", которая представляет нужное поле в отчёте (см. статью [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_объект|Пример определения названия привязки типа "Объект"]]). |
- | <code vb> | + | <code> |
VarName = "Статус_процесса_c9a10e8d" 'название привязки | VarName = "Статус_процесса_c9a10e8d" 'название привязки | ||
Строка 361: | Строка 359: | ||
Например, при выводе отчета от процесса получить данные названия процесса можно таким образом: | Например, при выводе отчета от процесса получить данные названия процесса можно таким образом: | ||
- | <code vb> | + | <code> |
Name = ob.Название 'получаем Название объекта, от которого вызвали отчет | Name = ob.Название 'получаем Название объекта, от которого вызвали отчет | ||
Строка 385: | Строка 383: | ||
В таких случаях каждую решаемую задачу удобно оформлять отдельным макросом. А в ключевом макросе "ПослеВыполненияОтчета" лишь вызывать по очереди нужные макросы. Все эти макросы оформляются в том же окне, где и ключевой макрос и делается так: | В таких случаях каждую решаемую задачу удобно оформлять отдельным макросом. А в ключевом макросе "ПослеВыполненияОтчета" лишь вызывать по очереди нужные макросы. Все эти макросы оформляются в том же окне, где и ключевой макрос и делается так: | ||
- | <code vb> | + | <code> |
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) | Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) | ||
Строка 407: | Строка 405: | ||
Если такие макросы имеют одинаковые части кода, то их тоже можно (и рекомендуется) выносить в отдельные макросы или функции в том же окне с ключевым макросом. Например, функция для определения присутствия в отчете необходимой привязки типа "Список" (см. [[#работа_с_копией_отчета_содержащим_макрос|Работа с копией отчета, содержащим макрос]]) может быть следующей: | Если такие макросы имеют одинаковые части кода, то их тоже можно (и рекомендуется) выносить в отдельные макросы или функции в том же окне с ключевым макросом. Например, функция для определения присутствия в отчете необходимой привязки типа "Список" (см. [[#работа_с_копией_отчета_содержащим_макрос|Работа с копией отчета, содержащим макрос]]) может быть следующей: | ||
- | <code vb> | + | <code> |
Function BookmarkIs(BookmarkName As String) As Boolean | Function BookmarkIs(BookmarkName As String) As Boolean | ||
Строка 431: | Строка 429: | ||
Использование этой функции из макроса может быть таким: | Использование этой функции из макроса может быть таким: | ||
- | <code vb> | + | <code> |
Sub MacrosN () | Sub MacrosN () | ||