Форум пользователей Visio
http://visio.getbb.ru/

Атоматизация рисования схема visio через VBA
http://visio.getbb.ru/viewtopic.php?f=6&t=1313
Страница 1 из 3

Автор:  Hamit [ 19 мар 2018, 15:38 ]
Заголовок сообщения:  Атоматизация рисования схема visio через VBA

Доброе время суток, господа, возможно и дамы..))
В наличии ПО MS Visio 2013, есть набор элементов в формате *.vssx.
Есть необходимость постоянно создавать типовые схемы с использованием фигур из набора элементов.
Как сейчас:
из набора элементов добавляется фигура, вручную заполняет текст фигуры и данные фигуры, потом добавляется следующая фигура и т.д., добавляются соединительные линии.
Как я вижу процесс через VBA:
при запуске макроса VBA выходит диалоговое окно, где необходимо отметить какие фигуры необходимо добавить на схему с различными полями, такими как hostname, IP адрес, производитель и т.п.
после заполнения и нажатия "ок" на схеме появляются отмеченные фигуры, текст в фигуре, а также заполненные данные фигуры.
Прошу помочь начинающему программисту VBA осуществить данную реализацию.
1. как через VBA добавить на лист фигуру из набора?
2. как задать есть текст и данные?
с диалоговым окном, я думаю, разберусь сам, но буду признателен за советы.

Автор:  Robink [ 19 мар 2018, 15:58 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

100500 раз уже тут говорю. Запись макросов...

Автор:  Hamit [ 19 мар 2018, 16:04 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

Robink писал(а):
100500 раз уже тут говорю. Запись макросов...


спасибо, конечно, за запись макроса осуществляется по действию пользователя с мышью и иными действиями с клавиатуры.
Хотелось бы увидеть примеры более программного подхода

Автор:  9rey [ 19 мар 2018, 16:17 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

имелось в виду - включаешь запись макросов, делаешь то что тебе надо (например кидаешь шейп на лист), открываешь редактор макросов и смотришь код. отсюда и плясать. с остальным так же

Автор:  god-udach [ 19 мар 2018, 16:47 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

Hamit писал(а):
выходит диалоговое окно, где необходимо отметить какие фигуры необходимо добавить на схему с различными полями, такими как hostname, IP адрес, производитель и т.п.
после заполнения и нажатия "ок" на схеме появляются отмеченные фигуры, текст в фигуре, а также заполненные данные фигуры.
если таких фигур будет много, диалоговое окно может стать довольно сложным.
egoist в сообщении #1809 писал(а):
возник такой вопросик есть 980 текст боксов...
я бы предложил все эти данные (имя мастера, текст в фигуре, hostname, IP адрес, производитель) вводить в Excel.
В автоматизации рисования схем всегда самый сложный момент: позиционирование фигур!

Автор:  Hamit [ 19 мар 2018, 16:57 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

god-udach писал(а):
если таких фигур будет много, диалоговое окно может стать довольно сложным.

Фигур немного, порядка 20 шт.
Про второй пункт не особо понял, это цитата не моя..))

Ecxel возможно, но думаю что некое окно с несколькими параметрами будет удобнее

Автор:  god-udach [ 19 мар 2018, 17:06 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

Для 20 фигур да по 5 параметров (имя мастера, текст в фигуре, hostname, IP адрес, производитель) уже 100 текстбоксов надо!
Или вы собрались автоматизировать добавление фигур по одной?

Автор:  Hamit [ 19 мар 2018, 17:10 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

god-udach писал(а):
Для 20 фигур да по 5 параметров (имя мастера, текст в фигуре, hostname, IP адрес, производитель) уже 100 текстбоксов надо!
Или вы собрались автоматизировать добавление фигур по одной?


Одновременно на типовой схеме будет 3, максимум 4 фигуры из этих 20

Автор:  god-udach [ 19 мар 2018, 17:44 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

здесь про вытаскивание мастера на лист из трафарета документа и из внешнего документа
Tumanov в сообщении p#198 писал(а):
Dim Mast As Visio.Master
Set Mast = ActiveDocument.Masters("stamp")
Set sh = Page.Drop(Mast, 2, 2)
End Sub
Макрос должен быть записан в обработчике события Document_PageAdded. Обработчик будет вызываться при каждом добавлении новой страницы.
При вызове ему передается ссылка на новую страницу (Page). Остается только взять рамку и поместить ее в нужное место.
В примере рамка берется из Document Stencil и называется "stamp". В принципе, можно брать и из любого трафарета, только это будет чуть посложнее.
Позицию тоже определить поточнее. В примере для простоты штамп опускается в точку с координатами x=2, y=2.
---
2. Set stnObj = Documents("Basic Shapes.vss") - это не путь к трафарету, а выбор уже имеющегося открытого трафарета. Если трафарет еще не открыт, то нужно выполнить примерно такую операцию
Set stnObj = Documents.Add ("Basic Shapes.vss") и потом можно брать из него мастер-шейпы.
Set MastObj = stnObj.Masters("stamp")

про добавление надписи к фигуре
Tumanov в сообщении p#264 писал(а):
Если известен шейп, например sh, то текст убирается так:
sh.Text = ""
То что собирались сделать надписью к вашей фигуры напишите в кавычках
про заполнение строк Shape Data
Tumanov в сообщении p#6669 писал(а):
sh.Cells("Prop.Property1") = Now()
вместо Now() пишите что вам надо. Нюанс при вводе хостнеймов и т.п. текстовых полей заключайте текст в тройные кавычки - """Хостнейм"""

Автор:  Hamit [ 20 мар 2018, 08:06 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

Спасибо!
Буду пробовать

Автор:  Hamit [ 20 мар 2018, 10:27 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

god-udach писал(а):
Tumanov в сообщении p#264 писал(а):
Если известен шейп, например sh, то текст убирается так:
sh.Text = ""


а как в текст фигуры записать две строки?
чтобы в тексте фигуры получилось:
текст1
текст2

Автор:  Tumanov [ 20 мар 2018, 10:34 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

Код:
ActivePage.Shapes(1).Text = "текст1" & Chr(10) & "текст2"

Автор:  Hamit [ 20 мар 2018, 15:01 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

god-udach писал(а):
про заполнение строк Shape Data
Tumanov в сообщении p#6669 писал(а):
sh.Cells("Prop.Property1") = Now()
вместо Now() пишите что вам надо. Нюанс при вводе хостнеймов и т.п. текстовых полей заключайте текст в тройные кавычки - """Хостнейм"""

и еще, если не затруднит
я хочу записать текст в фигуру и текст в данные фигуры через одну и туже переменную:
к примеру:
Код:
hostNameBSU = "TEST_BSU-UFA1"
ipAddressBSU = "10.0.0.200"

сам текст фигуры заполняется норм:
Код:
shInfinetBSU.Text = hostNameBSU & Chr(10) & ipAddressBSU

а вот при заполнении данных фигуры возникли сложности.
никак не пойму как указать переменную в строке:
Код:
shInfinetBSU.Cells("Prop.IP_address").Formula = ipAddressBSU

ради эксперимента заменил текст переменной на:
Код:
ipAddressBSU = """10.0.0.200"""

тогда соотвествующее поле в данных фигуры заполнилось норм, а сам текст фигуры выглядит как:
"10.0.0.200"
т.е. заключен в кавычки

Как присвоить полю в данных значение текстовой переменной?

Автор:  Shishok [ 20 мар 2018, 15:21 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

Вот так, например:
shInfinetBSU.Cells("Prop.IP_address.Value").FormulaU = """" & ipAddressBSU & """"

Автор:  Tumanov [ 20 мар 2018, 15:26 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

С кавычками с непривычки легко запутаться, поэтому можно еще использовать вот такой вариант
Код:
IP_address = "10.0.0.200"
.FormulaU = Chr(34) & IP_address & Chr(34)

Автор:  Hamit [ 20 мар 2018, 16:40 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

С добавлением фигур, текст фигур и данных в нее я более менее разобрался.
Спасибо всем большое.

Теперь функционал InputBox, где необходимо ввести необходимые данные.
Скажите, пожалуйста, возможно ли вывести на экран окно, в котором можно не только ввести некие данные, но и "поставить галочку" напротив необходимых.
Если да - то пошлите в нужном направлении..))

Или это можно реализовать только вставкой в документ CheckBox через конструктор Visio, и далее работать с ним, как с элементом?

Автор:  god-udach [ 20 мар 2018, 17:53 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

InputBox заполнить лишь ОДНО ПОЛЕ, таким образом придется вызвать эту команду несколько раз!
Для ввода нескольких полей придется создавать пользовательскую форму, добавить на нее контроля и т.п. Путь не легкий.
Я с самого начала предлагал посмотреть в сторону заполнения всех полей в Excel.
Здесь было аналогичное обсуждение
DArkadiy в ветви обсуждения писал(а):
вместо формы хочу использовать данные из екселя

Автор:  Robink [ 20 мар 2018, 17:58 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

гугль
https://www.homeandlearn.org/getting_st ... forms.html

Автор:  Hamit [ 27 мар 2018, 15:15 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

Я Все таки решил заморочиться с формой.
Создал форму (во вложении)
Изображение
у полей этой формы есть данные, например:
(name) BSUTextBox
или
(name) BSUCheckBox

задача:
при выставлении галочки сделать активным поле текста (в идеале), или поле постоянно активно.
но при выставлении галочки взять данные в текстовом поле и передать в макрос на отрисовку фигуры
сам макрос пока выглядит так (как убрать квакозябры вместо русского текста не в курсе):

Код:
Sub TEST()
DataForDraw.Show
Dim InfinetBSU, InfinetSU As Visio.Master
Dim ProximBSU, ProximSU As Visio.Master
Dim hostNameBSU, ipAddressBSU As String
Dim hostNameSU, ipAddressSU As String
Dim hostType, hostBSnum, hostPlace, hostParent As String
Dim textLengthHostName, textLengthIP, textLength

Set InfinetBSU = ActiveDocument.Masters("Infinet")
Set InfinetSU = ActiveDocument.Masters("Infinet")

hostNameBSU = "TEST_BSU-UFA1"
textLengthHostName = Len(hostNameBSU)
ipAddressBSU = "10.0.0.200"
textLengthIP = Len(ipAddressBSU)

'Âñòàâëÿåì Ôèãóðó1:
Set shInfinetBSU = ActivePage.Drop(InfinetBSU, 2, 2)
'Âñòàâëÿåì â òåêñò ôèãóðû ìíîãîñòðî÷íûé òåêñò:
shInfinetBSU.Text = hostNameBSU & Chr(10) & ipAddressBSU
textLength = Len(shInfinetBSU.Text)

'MsgBox textLengthHostName
'MsgBox textLengthIP
'MsgBox textLength


'Çäåñü äåëàåì IP  àäðåñ â òåêñòå "ïîëóæèðíûì" ñ ðàçìåðîì øðèôòà 5:
Set ShapeChrs = shInfinetBSU.Characters
ShapeChrs.Begin = textLengthHostName + 1
ShapeChrs.End = textLength
ShapeChrs.CharProps(visCharacterStyle) = visBold
ShapeChrs.CharProps(visCharacterSize) = 5

shInfinetBSU.Cells("Prop.Network_Name.Value").Formula = """" & hostNameBSU & """"
shInfinetBSU.Cells("Prop.IP_address.Value").Formula = Chr(34) & ipAddressBSU & Chr(34)
''Âñòàâëÿåì Ôèãóðó2:
'Set shInfinetSU = ActivePage.Drop(InfinetSU, 3, 2)
'
'Set ProximBSU = ActiveDocument.Masters("Proxim")
'Set InfinetSU = ActiveDocument.Masters("Proxim")
''Âñòàâëÿåì Ôèãóðó1:
'Set shProximBSU = ActivePage.Drop(ProximBSU, 2, 3)
''Âñòàâëÿåì â òåêñò ôèãóðû ìíîãîñòðî÷íûé òåêñò:
'shProximBSU.Text = hostNameBSU & Chr(10) & ipAddressBSU
'
'
'Set ASR = ActiveDocument.Masters("ASR")
'Set PTN = ActiveDocument.Masters("PTN")
''Âñòàâëÿåì Ôèãóðó1:
'Set shASR = ActivePage.Drop(ASR, 1, 2)
''Âñòàâëÿåì â òåêñò ôèãóðû ìíîãîñòðî÷íû2 òåêñò:
'shASR.Text = "ASR" & Chr(10) & "TEST_BSU_IP"
End Sub



т.е. мне необходимо задать переменно, к примеру, "hostNameBSU" значение не в самом макросе, а взять его из значения текстового поля формы.
По возможности прошу подсказать, что в форме необходимо добавить (возможно заполнить какое то поле) и как "взять" из текстового поля значение и передать его переменной.

ну и заодно:
возможно ли какое то ООП в VBA?
т.е. возможно ли создать собственные объекты/классы, которые необходимо вызывать при выполнении тех или иных условий?

заранее спасибо.

Вложения:
1.JPG
1.JPG [ 39.96 Кб | Просмотров: 303 ]
UserForm.JPG
UserForm.JPG [ 60.01 Кб | Просмотров: 433 ]

Автор:  god-udach [ 27 мар 2018, 15:36 ]
Заголовок сообщения:  Re: Атоматизация рисования схема visio через VBA

про крокозябры
Alex_ST в сообщении писал(а):
у тебя до сих пор не пофиксен баг работы буфера обмена, возникший ещё при русификации VISTA живущий, похоже, до сих пор: если скопировать в буфер обмена текст, содержащий символы кириллицы, не переключив перед копированием раскладку клавиатуры в RUS, то после вставки скопированного текста в ответ форума или "блокнот" вместо кириллических букв будут "кракозябры" типа:
Äîïîëíèòåëüíûå ñâåäåíèÿ ñì. â çàìåòêàõ î âûïóñêå
Про использование пользовательских форм была ветка - Выпадающий список ComboBox на UserForm (азы ВБА)
Возможность использования классов в VBA присутствует
Основы работы с модулями классов

Страница 1 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/