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

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



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

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

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

Visio 2013 SDK download

Visio 2016 SDK download

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

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.   

31.03.2013  Using ODC Files with Visio  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.   

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.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).
Короче, видеть Вы будете в см, а вводить в дюймах.