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

Программирование



Основой программирования в Visio является объектная модель. В виде картинки доступна объектная модель Visio 2002.

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

Обычно для каждой версии создается свой SDK (Software Development Kit), в котором можно получить наиболее точные сведения. Адреса для загрузки:

Visio 2013 SDK download

Visio 2016 SDK download

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

22.02.2021  Using the CALLTHIS function in Visio  David Parker.   

10.12.2019  плейлист VISIO+VBA: Практика  Vigil.  Видео 

10.12.2019  плейлист VISIO+VBA: Теория  Vigil.  Видео 

07.06.2019  Локализация и разделители в Visio  Геннадий Туманов.   

31.07.2018  Enhancing the Built-In Containers in Visio  David Parker.   

10.12.2016  Opening an MS Access form from a Visio shape  David Parker.   

07.07.2015  Deleting Visio Shapes Programmatically  Chris Roth.   

21.05.2013  Getting the Name of Glued Connection Points  David Parker.   

28.08.2012  Checking a Visio Shape for Cell Errors  David Parker.   

14.03.2011  How to Run VBA Macros from a Ribbon Button in Visio 2010  David Parker.   

20.04.2010  Controlling the pencil mode programmatically  David Parker.   

02.11.2009  New Enumerations for Visio 2010  Visimation.   

03.08.2009  Re-opening Default Stencils  David Parker.   

20.05.2009  VBA Class Property Generator  Chris Roth.   

17.01.2009  Visio Viewer Developer Reference Released  David Parker.   

25.09.2008  Введение в автоматизацию Visio  Геннадий Туманов.  Вводная статья из запланированной серии статей о Visio и автоматизации. Определяется предметная область для данной серии, приводится предполагаемый перечень статей. 

25.09.2008  Программирование в Visio  Геннадий Туманов.  Из серии статей об автоматизации. Создание первой программы в Visio. Объектная модель и способы идентификации шейпов. Пример программы получения каталога трафарета. 

17.05.2008  Detect Sub-selected Shapes Programmatically  Chris Roth.   

25.02.2008  Edit Visio Masters Programmatically…the Right Way!  Chris Roth.   

01.01.2008  Visio tips & tricks for Interaction Designers  Martijn van Welie.   

17.05.2007  VBA Macro Security  Chris Roth.   

13.09.2006  Create Visio Flowcharts Programmatically  Chris Roth.   

22.09.2004  Visio Development Top Five Performance Tips   Mai-lan.  (англ.) Пять главных советов разработчику по повышению производительности 

22.09.2004  Top Ten Things to Know When Using the Visio 2003 ActiveX Control  Mai-lan.  (англ.) Десять основных причин использовать Visio 2003 ActiveX Control 

01.01.2002  Использование редактора Visual Basic в Visio 2002  неизвестный.   

01.01.1900  Visio Enumerations  John Goldsmith.   

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

Как из Visio из процедуры на VBA получить доступ к листу в книге Excel?

Как из Visio из процедуры на VBA получить доступ к листу в книге Excel?
Так же интересует обратная проблема
Генерация файла Excel из Визио 

Sub ReadExcel()
Dim ExcelObject As Object
Set ExcelObject = CreateObject("Excel.Application")
ExcelObject.Workbooks.Add ' Добавляем новую книгу
ExcelObject.Workbooks.Open FileName:="C:\Work\Opis.xls" ' Открываем файл
ExcelObject.Visible = True ' делаем excel видимым
ExcelObject.Range("A1", "A1").Value = "Test:"
ExcelObject.Range("A1", "A1").HorizontalAlignment = 1
ExcelObject.Range("A1", "A1").VerticalAlignment = 2
ExcelObject.Range("A1", "A1").WrapText = 1
' ExcelObject.Quit ' для закрытия excel
End Sub 

Соответственно можно только открыть какой-то файл или только создать пустую книгу. Остальные команды и форматы записи управления Excelем можно узнать используя запись макросов в самом Excel, а затем посмотрев текст в редакторе VBA. 

Как определить размер (длину в мм) текстовой строки?

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

На основе примера из документации: 

Sub Text_width()
Dim shpObj As Visio.Shape
Set pagsObj = ThisDocument.Pages
Set pagObj = pagsObj.Item(1)
Set selectObj = ActiveWindow.Selection
Set shpObj = ActiveWindow.Selection.Item(1)
shpObj.Text = "Text here" 'пишем текст в фигуру или оставляем
shpObj.AddSection visSectionUser 'добавляем раздел
shpObj.AddRow visSectionUser, visRowUser + 0, 0 'добавляем строку
Set celObj = shpObj.Cells("User.Row_1") 'назначаем ячейку
celObj.Formula = "TEXTWIDTH(TheText)" 'забиваем формулу
TextWTH = celObj.Result(visMillimeters) 'забираем результат
MsgBox TextWTH, , "Text width" 'показываем результат
End Sub 

Как из скрипта можно установить единицу измерения?

Есть какая то заморочка с дюймами... вообще хочу работать с см, поэтому меняю для странички в Page setup inches на cm все вроде ок..
Потом, при расстановке фигур по страничке не могу разобраться в чем идет расчет, например:
elements(0).SetBegin x / 2.54, (2 + Kcell_total(0) / step) / 4.54
при значении Kcell_total(0)=4241, x=2 начало получается расположенным в точке (2;4,5) - каким образом.... не могу понять и попутно как из скрипта можно установить единицу измерения для pages или для page.. 

Единица измерения переключается масштабом 

ActivePage.PageSheet.Cells("PageScale").Formula = "1 cm"
ActivePage.PageSheet.Cells("DrawingScale").Formula = "1 cm" 

переведет в см, а 

ActivePage.PageSheet.Cells("PageScale").Formula = "1 in"
ActivePage.PageSheet.Cells("DrawingScale").Formula = "1 in" 

переключит в дюймы.
Но вводите данные Вы все равно в дюймах, поэтому (2дюйма)/2.54 дает 2 см и отстоит на 2 клеточки от края листа, если единицу измерения установили см. (по Y Вы не сообщили значение step).
Короче, видеть Вы будете в см, а вводить в дюймах.