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

Форум по вопросам применения и программирования в Visio
Текущее время: 21 июн 2018, 12:29

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


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


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



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

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

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

Забавный баг, попробовал копипастить в русской раскладке, получилось.
Но вот писать по русски в VBA не выходит, но не суть..))

god-udach писал(а):
Про использование пользовательских форм была ветка - Выпадающий список ComboBox на UserForm (азы ВБА)

не нашел в данной ветке ничего для себя.


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

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

Добавить очки репутацииУменьшить очки репутации
Все-таки вопрос не очень конкретный.
Может попробовать рассмотреть какой-то пример...
Вот например, на складе лежит дополнение, сделанное на VBA и содержащее форму. Скачайте, посмотрите, как работает. А потом уже давайте конкретные вопросы.
viewtopic.php?f=15&t=853
Может там и что-нибудь попроще есть... Я просто все не стал просматривать, а дал ссылку на первое же, где есть форма.


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

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

Добавить очки репутацииУменьшить очки репутации
Уж не такая ли штука тебе нужна?

Изображение


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

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

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Уж не такая ли штука тебе нужна?


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

если будет код этого шедевра - буду признателен :)


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

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

Добавить очки репутацииУменьшить очки репутации
Скачать:
AddShapesFromStensil.zip
https://yadi.sk/d/qbpj9WI9d2eqF


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

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

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Скачать:
AddShapesFromStensil.zip
https://yadi.sk/d/qbpj9WI9d2eqF

Если не затруднит, в каком именно из архивов содержится указанный Вами пример?


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

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

Добавить очки репутацииУменьшить очки репутации
Ну так вот - AddShapesFromStensil.zip :o


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

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

Добавить очки репутацииУменьшить очки репутации
Более менее разобрался, спасибо Shishok.
вот пока получается так:
макрос вызывающий форму:
Код:
Sub Draw()
DataForDraw.Show
End Sub

код в самой форме:
Код:
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
__________________________________________
Private Sub btnDraw_Click()
Call Start_Draw
Unload Me
End Sub
__________________________________________
Private Sub BSUTextBoxName_Change()

hostNameBSU = BSUtxtName.Value
ipAddressBSU = BSUtxtIP.Value

Set InfinetBSU = ActiveDocument.Masters("Infinet")
Set InfinetSU = ActiveDocument.Masters("Infinet")
textLengthHostName = Len(hostNameBSU)
textLengthIP = Len(ipAddressBSU)

'Вставляем Фигуру:
Set shInfinetBSU = ActivePage.Drop(InfinetBSU, 2, 2)
'Вставляем в текст фигуры многострочный текст:
shInfinetBSU.Text = hostNameBSU & Chr(10) & ipAddressBSU
textLength = Len(shInfinetBSU.Text)

'Здесь делаем 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)
End Sub
__________________________________________
Sub Start_Draw()
If BSUCheckBox Then Call BSUTextBoxName_Change Else MsgBox "no Checked"

End Sub


на данном этапе есть что можно упросить/оптимизировать?
по мнению бывалых..))

ну и попутно: нужна ли процедура UserForm_Initialize()


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

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

Добавить очки репутацииУменьшить очки репутации
Во первых:
всегда вставляй Option Explicit и обязательно объявляй свои переменные! Но не нужно их все делать уровня модуля.

Во вторых:
Код:
Set InfinetBSU = ActiveDocument.Masters("Infinet")' эта строка не нужна !!!!!!!!!!!!
Set InfinetSU = ActiveDocument.Masters("Infinet") ' эта строка не нужна !!!!!!!!!!!!

'Вставляем Фигуру:
Set shInfinetBSU = ActivePage.Drop(InfinetBSU, 2, 2) ' вместо этой строки надо:
Set shInfinetBSU = ActivePage.Drop(ActiveDocument.Masters("Infinet"), 2, 2)


Здесь ты добавляешь шейп не из трафарета(сохраненного где - то на диске и открытого в твоем документе), а из самого открытого документа.
А если вдруг не будет в документе этого Мастера? Например создашь новый документ и запустишь в нем свой код. Ошибка будет.

Во третьих:
Выложи файл с кодом и своей фигурой. Если фигура не супер секретная. :D


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

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

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Во первых:
всегда вставляй Option Explicit и обязательно объявляй свои переменные! Но не нужно их все делать уровня модуля.

Разве здесь я не объявил переменные?:
Код:
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

Shishok писал(а):
Во вторых:
Код:
Set InfinetBSU = ActiveDocument.Masters("Infinet")' эта строка не нужна !!!!!!!!!!!!
Set InfinetSU = ActiveDocument.Masters("Infinet") ' эта строка не нужна !!!!!!!!!!!!

'Вставляем Фигуру:
Set shInfinetBSU = ActivePage.Drop(InfinetBSU, 2, 2) ' вместо этой строки надо:
Set shInfinetBSU = ActivePage.Drop(ActiveDocument.Masters("Infinet"), 2, 2)


Здесь ты добавляешь шейп не из трафарета(сохраненного где - то на диске и открытого в твоем документе), а из самого открытого документа.
А если вдруг не будет в документе этого Мастера? Например создашь новый документ и запустишь в нем свой код. Ошибка будет.

Мне нужно именно из трафарета, я пока не знаю как обновляются эти данные, потому как даже после изменения фигуры трафарета макрос все равно вставляет "старую" фигуру, но набор всегда подгружен в файл.
Если не будет загружен в файл набор фигур, откуда макрос возьмёт фигуру?
Shishok писал(а):
Во третьих:
Выложи файл с кодом и своей фигурой. Если фигура не супер секретная. :D

Выложу завтра


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

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Разве здесь я не объявил переменные?:

Hу да, но они все уровня модуля. ни к чему это. Распихать эти объявы по своим процедурам. :)

Цитата:
Мне нужно именно из трафарета, я пока не знаю как обновляются эти данные, потому как даже после изменения фигуры трафарета макрос все равно вставляет "старую" фигуру, но набор всегда подгружен в файл.

Так я об этом и писал! Поэтому у тебя и вставляет старую фигуру! Вот из трафарета:
Код:
ActivePage.Drop Documents.Item("ИмяТрафарета.vss").Masters.Item("ИмяМастера"), 2, 2' если трафарет открыт уже


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

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

Добавить очки репутацииУменьшить очки репутации
Заменил
Код:
Set shInfinetBSU = ActivePage.Drop(InfinetBSU, 2, 2)
на
Код:
Set shInfinetBSU = ActivePage.Drop(Application.Documents.Item("ШПД_.vssx").Masters.Item("Infinet"), 2, 2)

сам файл и набор элементов во вложении↓

Option Explicit добавил уже потом.
Переменные чуть позже распихаю по процедурам, как определюсь с блок-схемой работы макроса.

shInfinetBSU объявил как:
Код:
Dim shInfinetBSU As Visio.Shape


Вложения:
Auto_draw.rar [263.5 Кб]
Скачиваний: 6
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 04 апр 2018, 09:03 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Правила форума
При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
И трафарет тоже - .vss
:wall:


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

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

Добавить очки репутацииУменьшить очки репутации
Предпочтительным, но не обязательным..))
пересохранил↓
в строке:
Код:
Set shInfinetBSU = ActivePage.Drop(Application.Documents.Item("ШПД_.vssx").Masters.Item("Infinet"), 2, 2)

не менял имя набора


Вложения:
Auto_draw.rar [201.17 Кб]
Скачиваний: 3
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 04 апр 2018, 10:48 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Набросал. Может что и не так понял. Спрашивай.


Вложения:
Test_auto_draw_VBA_v2.vsd [34.5 Кб]
Скачиваний: 4
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 04 апр 2018, 11:06 
Не в сети
Новичок

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Зачем checkbox_ы не понял

Типовая схема может состоять из нескольких устройств.
может быть BSU+SU, может BSU+SU+switch, может быть просто switch
при этом еще еще есть разные производители BSU, которые в visio это разные трафареты.
CheckBox как раз и нужен для того, чтобы сначала отметить "что необходимо", а потом уже "необходимое" нарисовать с заданными параметрами.

строка:
Код:
Load DataForDraw
обязательно нужна в VBA?
насколько я понял, метод show одновременно выполняет и load, так?

Данный код:
Код:
Private Sub TextBold() ' настройка текста шейпа

With ActiveWindow.Selection.PrimaryItem.Characters
    .Begin = Len(BSUtxtName.Text)
    .End = Len(.Text)
    .CharProps(visCharacterStyle) = visBold
    .CharProps(visCharacterSize) = 5
End With

End Sub
по факту делает "полужирным" только часть текста во второй строке, см срин

процедура Private Sub UserForm_Initialize() обязательно должна быть?
в моем примере роль рисования выполняет Sub Start_Draw(), ее не достаточно?


Вложения:
2.JPG
2.JPG [ 24.42 Кб | Просмотров: 124 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 04 апр 2018, 11:26 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Зачем Load DataForDraw - я так к привык :)

Поменяй процедуру на:
Код:
Private Sub TextBold() ' настройка текста шейпа
Dim LengthTxt As Integer

With ActiveWindow.Selection.PrimaryItem.Characters
    LengthTxt = Len(.Text)
    .Begin = Len(BSUtxtName.Text) + 1
    .End = LengthTxt
    .CharProps(visCharacterStyle) = visBold
    .CharProps(visCharacterSize) = 5
End With

Цитата:
процедура Private Sub UserForm_Initialize() обязательно должна быть?

Необязательно. По обстоятельствам.
Цитата:
Типовая схема может состоять из нескольких устройств.
может быть BSU+SU, может BSU+SU+switch, может быть просто switch
при этом еще еще есть разные производители BSU, которые в visio это разные трафареты.
CheckBox как раз и нужен для того, чтобы сначала отметить "что необходимо", а потом уже "необходимое" нарисовать с заданными параметрами.

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


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

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

Добавить очки репутацииУменьшить очки репутации
Как то так:


Вложения:
Test_auto_draw_VBA_v2.vsd [32.5 Кб]
Скачиваний: 3
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Атоматизация рисования схема visio через VBA
СообщениеДобавлено: 04 апр 2018, 11:49 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
Так почему не подходит мой первый пример(AddShapesFromStensil)?
Там можно выбрать трафарет. Выбрать, вставить и отредактировать шейп.
Только добавить процедуру вставки текста в шейп и его редактирование(жирный, размер шрифта).


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

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

Добавить очки репутацииУменьшить очки репутации
Shishok писал(а):
Так почему не подходит мой первый пример(AddShapesFromStensil)?
Там можно выбрать трафарет. Выбрать, вставить и отредактировать шейп.
Только добавить процедуру вставки текста в шейп и его редактирование(жирный, размер шрифта).

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


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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

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