All Forums
 Категория Visio
 Форум Вопросы и ответы
 Копирование всех свойст shapes или stensils
Author Previous Topic Topic Next Topic  

moon4ik

Ukraine
6 Posts

Posted - 08/01/2007 :  15:40:10  Visit moon4ik's Homepage
Вообщем проблема такова: был сделан Stencil которым я пользовался. Но в скоре пришлось его переделать и подкорректировать (в свойствах Show ShapeSheet в разделе Line Format поставил условие, что при изменении статуса меняется цвет шейпа). Как мне можно сохранить или унаследовать свойства одного шейпа(Shape) или стенсила(Stencil) группе уже размещенных на плане таких же шейпов но без изменения свойств. В общем надо скопировать одну строку свойств одного шейпа в сотни других шейпов

--
Alex Moon

Tumanov

Russia
1198 Posts

Posted - 08/01/2007 :  21:54:35
1. Если у Вас уже был Stencil, то при переносе мастер-шейпа на рисунок экземпляр мастер-шейпа попадает в Document Stencil. Если Вы подкорректируете его свойства, то они автоматически учтутся во всех экземплярах на рисунке. Это простейший способ.
2. При профессиональной разработке можно пользоваться Shape Studio. Это инструмент, позволяющий применять одинаковые свойства к множеству шейпов. Правда, для эпизодического использования инструмент несколько тяжеловат...
3. Если изменения касаются Custom Properties, то можно пользоваться Custom Properties Set, но кажется это не тот случай.
4. Третьими фирмами разработано несколько инструментов, позволяющих применить свойства одного шейпа к набору других шейпов. Названий сейчас не помню, но можно поискать... Стоят они где-то в районе 20-50$.
5. Наконец, в топике topic.asp@TOPIC_ID=550.html предлагался мой инструмент для копирования произвольного набора свойств одного шейпа в другие шейпы. Тогда он еще не мог копировать свойства в множество шейпов-приемников. Сейчас может. Но так как особого интереса предложение не вызвало, больше я его не предлагал. Развиваю исключительно для себя :). Основано на том, что весь шейп-лист выбранного шейпа копируется в Excel-файл. далее из него можно выбрать нужные секции и применить (скопировать) к заданному множеству шейпов.
6. Наконец, если требуется всего одну ячейку подправить, можно просто макрос написать, который обошел бы все шейпы, выбрал нужные и подставил значение в ячейку.
Go to Top of Page

moon4ik

Ukraine
6 Posts

Posted - 08/02/2007 :  12:53:19  Visit moon4ik's Homepage
В принципе вот я сделал макрос только для пяти элементов. Если на листе только те элементы которые мне надо изменить то он меняет. Но так как у меня на листе множество обьектов план здания, а мне надо поменять только в шейпах с именами "информационная розетка" возникает проблема как сделать условия проверки имени шейпов и перебор всех шейпов и только в тех что мне надо поменять параметры?

Мой кривой макрос:

"n = 5
For i = 1 To n
Application.ActiveWindow.Page.Shapes.ItemFromID(i).OpenSheetWindow
Application.ActiveWindow.Shape.CellsSRC(visSectionProp, 5, visCustPropsType).FormulaU = "0"
Application.ActiveWindow.Shape.CellsSRC(visSectionObject, visRowLine, visLineColor).FormulaU = "IF(STRSAME(Prop.Status,""не оконечен""),20,IF(STRSAME(Prop.Status,""ремонт""),2,IF(STRSAME(Prop.Status,""в работе""),10,IF(STRSAME(Prop.Status,""тестирование""),12,9))))"
Application.Windows.ItemEx("Drawing1").Activate
Next i"


--
Alex Moon
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 08/02/2007 :  16:52:56
Проверять либо по имени мастера (пример ttt), либо по имени шейпа (пример ttt1)
В первом случае приходится ошибки обрабатывать, во втором - надо чтобы не было похожих имен, например "информационная розетка левая".

Sub ttt()
Dim Sh As Visio.Shape
On Error Resume Next
For Each Sh In ActivePage.Shapes
Err.Clear
s = Sh.Master.Name
If Err.Number <> 91 Then
If StrComp(Sh.Master.Name, "информационная розетка") = 0 Then
Debug.Print Sh.Name
End If
End If
Next
On Error GoTo 0
End Sub

Sub ttt1()
Dim Sh As Visio.Shape
For Each Sh In ActivePage.Shapes
If InStr(1, Sh.Name, "информационная розетка") = 1 Then
Debug.Print Sh.Name
End If
Next
End Sub
Go to Top of Page

moon4ik

Ukraine
6 Posts

Posted - 08/02/2007 :  18:35:39  Visit moon4ik's Homepage
огромное спасибо! А еще не подскажешь? Возникла проблемка не сохраняются в шейпах свойства. Вообщем создал в шейпе что то типа примечания, но текс не сохраняется :( в свойствах customProperties указал в type 0 (string) текс вводиться нумерация такого типа 1.110-01. После сохранения документа текст в поле исчезает.

--
Alex Moon
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 08/02/2007 :  18:40:38
Наверное не подскажу...
Может кавычек каких-нибудь не хватает...
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)