Author |
Topic |
|
moon4ik
Ukraine
6 Posts |
Posted - 08/01/2007 : 15:40:10
|
Вообщем проблема такова: был сделан 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. Наконец, если требуется всего одну ячейку подправить, можно просто макрос написать, который обошел бы все шейпы, выбрал нужные и подставил значение в ячейку. |
|
|
moon4ik
Ukraine
6 Posts |
Posted - 08/02/2007 : 12:53:19
|
В принципе вот я сделал макрос только для пяти элементов. Если на листе только те элементы которые мне надо изменить то он меняет. Но так как у меня на листе множество обьектов план здания, а мне надо поменять только в шейпах с именами "информационная розетка" возникает проблема как сделать условия проверки имени шейпов и перебор всех шейпов и только в тех что мне надо поменять параметры?
Мой кривой макрос:
"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 |
|
|
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 |
|
|
moon4ik
Ukraine
6 Posts |
Posted - 08/02/2007 : 18:35:39
|
огромное спасибо! А еще не подскажешь? Возникла проблемка не сохраняются в шейпах свойства. Вообщем создал в шейпе что то типа примечания, но текс не сохраняется :( в свойствах customProperties указал в type 0 (string) текс вводиться нумерация такого типа 1.110-01. После сохранения документа текст в поле исчезает.
-- Alex Moon |
|
|
Tumanov
Russia
1198 Posts |
Posted - 08/02/2007 : 18:40:38
|
Наверное не подскажу... Может кавычек каких-нибудь не хватает... |
|
|
|
Topic |
|
|
|