Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д.

Отчеты

Отчеты - важный инструмент Visio, позволяющий быстро выбрать и оформить данные, находящиеся в документе Visio, в виде таблицы на поле документа или отдельного файла.

Ручные операции с отчетами довольно хорошо раскрыты в справке Visio и множестве обучающих статей. Но помимо этого существует и возможность программного запуска отчетов. А вот эта возможность описана гораздо хуже. Я бы сказал, что она вообще толком не документирована. Частично эта тема раскрывается в статье Отчеты Visio Геннадия Туманова

.

Перечень литературы

20.03.2019  Из Visio в Excel через Power Query   Геннадий Туманов    

28.12.2018  Отчеты Visio   Геннадий Туманов   Структура описания отчета, программный вызов, ключи. 

03.08.2009  Displaying the Master and Stencil Name of Shape   David Parker    

15.10.2006  Visio's other file format – Report Definition files   John Marshall   Краткое описание формата .vrd 

Ответы на вопросы

Подсчет количества элементов

Имеется рисунок с большим количеством элементов порожденных 10-20 мастерами. Требуется посчитать количество элементов порожденных конкретным мастером. При добавлении поля в произвольный sheet функция ID считает общее количество всех sheet на странице включая саму себя. Может есть способ указать в ID имя конкретного мастера.  

Буду рад, если кто-то меня опровергнет, но кажется на уровне ShapeSheet эта задача не имеет решения, так как в ячейке можно дать любую ссылку, но нельзя последовательно опросить множество Shape. И функция ID дает не количество, а номер последнего Shape, который только иногда совпадает с количеством. Зато на программном уровне задача решается очень легко. Например: - рисуем на листе единственный квадрат (для вывода результатов); - вводим в документ макрос вот такого вида:  

Sub ttt() s1 = "" For i = 1 To ActivePage.Shapes.Count s1 = s1 + "Name= " + ActivePage.Shapes(i).Name s1 = s1 + " Id= " + Str(ActivePage.Shapes(i).ID) + vbCrLf Next ActivePage.Shapes(1).Text = s1 End Sub  

- и подцепляем его к нашему квадрату через Format/Behavior/Double-Click/RunMacro/TchisDocument.ttt Теперь при двойном щелчке по этому квадрату наша функция будет последовательно опрашивать все имеющиеся на листе Shapes и писать в качестве текста их имена и ID. На этот лист можно набросать много мастеров или нарисовать Shape и двойным щелчком по первому квадрату обновить их список. Ну, а если мы можем собрать список имеющихся шейпов, то после небольшой модификации можем его рассортировать или подсчитать экземпляры нужных мастеров. Одна беда - как только появляются макросы, Visio будет приставать со своими предупреждениями (хотя это можно и отключить). 

Выполнение предопределенного отчета в Visio

Как это сделать вручную, есть информация. А можно ли его вызвать из VBA?  

Можно. На эту тему есть статья "Отчеты Visio" - https://visioport.ru/blog/index.php/2-otchety-visio  

Запуск отчета из VBA

Столкнулся с такой проблемой - не получается запустить отчет о фигурах, если файл с отчетом лежит в папке, где в названии есть пробел. Если в названиях папок нет пробелов, то все запускается. Это какой то баг или фича? А можно сначала сохранить файл отчета в документ и потом уже оттуда запускать? Макрекордером не получилось записать сохранение отчета в документ.  

1. Описание отчета сохраняется в файле документа в ячейке User.visPropRpt1 шейп-листа документа. В принципе, через эту ячейку его можно как читать, так и писать макросом. Если отчетов несколько, то имя будет немного изменяться. 2. Если в имени папки или файла с определением отчета есть пробел, то путь к файлу должен заключаться в двойные кавычки. Например, так:  

Application.Addons("VisRpt").Run ("/rptDefName=""C:\temp\INV INV.VRD"" /rptOutput=Excel_Shape")  

3. Но это еще не все. Если запускать отчет из Program Files, то и кавычки не помогут. C:\Program Files\Microsoft Office\root\Office16\1049\INVENTRY.VRD Помимо пробела здесь сказывается система защиты Windows, не разрешающая простому пользователю такое действие. Но если запустить Visio от имени администратора, а потом открыть нужный документ и выполнить макрос запуска отчета, то все будет нормально. Администратору можно.