Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 25 июн 2018, 17:18

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 15:38 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 15:58 
Не в сети
Ветеран

Зарегистрирован: 05 июл 2012, 21:34
Сообщений: 212
Очков репутации: 27

Добавить очки репутацииУменьшить очки репутации
100500 раз уже тут говорю. Запись макросов...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 16:04 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Robink писал(а):
100500 раз уже тут говорю. Запись макросов...


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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 16:17 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 892
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 120

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 16:47 
Не в сети
Новичок

Зарегистрирован: 01 янв 2010, 05:46
Сообщений: 45
Откуда: ЕАО, Россия
Использую Visio c: 2010
Очков репутации: 1

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 16:57 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

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

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 17:06 
Не в сети
Новичок

Зарегистрирован: 01 янв 2010, 05:46
Сообщений: 45
Откуда: ЕАО, Россия
Использую Visio c: 2010
Очков репутации: 1

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 17:10 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

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


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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 19 мар 2018, 17:44 
Не в сети
Новичок

Зарегистрирован: 01 янв 2010, 05:46
Сообщений: 45
Откуда: ЕАО, Россия
Использую Visio c: 2010
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
здесь про вытаскивание мастера на лист из трафарета документа и из внешнего документа
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() пишите что вам надо. Нюанс при вводе хостнеймов и т.п. текстовых полей заключайте текст в тройные кавычки - """Хостнейм"""


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 08:06 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Спасибо!
Буду пробовать


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 10:27 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

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


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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 10:34 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1131
Очков репутации: 100586

Добавить очки репутацииУменьшить очки репутации
Код:
ActivePage.Shapes(1).Text = "текст1" & Chr(10) & "текст2"


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 15:01 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
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"
т.е. заключен в кавычки

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 15:21 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 492
Использую Visio c: 2008
Очков репутации: 99

Добавить очки репутацииУменьшить очки репутации
Вот так, например:
shInfinetBSU.Cells("Prop.IP_address.Value").FormulaU = """" & ipAddressBSU & """"


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 15:26 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1131
Очков репутации: 100586

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 16:40 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

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

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 17:53 
Не в сети
Новичок

Зарегистрирован: 01 янв 2010, 05:46
Сообщений: 45
Откуда: ЕАО, Россия
Использую Visio c: 2010
Очков репутации: 1

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 20 мар 2018, 17:58 
Не в сети
Ветеран

Зарегистрирован: 05 июл 2012, 21:34
Сообщений: 212
Очков репутации: 27

Добавить очки репутацииУменьшить очки репутации
гугль
https://www.homeandlearn.org/getting_st ... forms.html


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 27 мар 2018, 15:15 
Не в сети
Новичок

Зарегистрирован: 19 мар 2018, 14:10
Сообщений: 22
Использую Visio c: 2010
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Я Все таки решил заморочиться с формой.
Создал форму (во вложении)
Изображение
у полей этой формы есть данные, например:
(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 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 27 мар 2018, 15:36 
Не в сети
Новичок

Зарегистрирован: 01 янв 2010, 05:46
Сообщений: 45
Откуда: ЕАО, Россия
Использую Visio c: 2010
Очков репутации: 1

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [bot] и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB