Author |
Topic |
|
bdfy
Belarus
267 Posts |
Posted - 07/31/2009 : 21:32:44
|
создал новый мастер. нужно в чертеже теперь все его копии заменить на новые. по идее можно было бы просто открыть старый мастер и вставить туда новую фигуру, ан нет. старый мастер был box. новый - line. в итоге теряются углы поворота, shape data и т.д. написал макрос который должен шейпы менять. да вот незадача - одно из свойств обьекта ("Prop._VisDM_name" - тип текст) упорно не переносится (( в чем дело ? quote: Sub заменить_шейпы() On Error Resume Next Set vs = Application.ActiveWindow.Selection
Set library = Application.ActiveDocument.Masters
newmaster = "Xnew"
For Each sh In vs
If sh.Master = "X" Then params = Array("Prop._VisDM_num", "Prop._VisDM_X") Application.ActiveWindow.Page.Drop library.ItemU("Xnew"), 0, 0 Set newsh = Application.ActiveWindow.Selection(1) Debug.Print newsh.Name w = sh.Cells("Width") h = sh.Cells("Height") x = sh.Cells("pinX") y = sh.Cells("pinY") ang = sh.Cells("angle") newsh.Cells("BeginX") = x - (w / 2) * Cos(ang) newsh.Cells("BeginY") = y - (w / 2) * Sin(ang) newsh.Cells("EndX") = x + (w / 2) * Cos(ang) newsh.Cells("EndY") = y + (w / 2) * Sin(ang) Debug.Print "name " & " " & sh.Cells("Prop._VisDM_name") 'Вот это имя ноль возвращает ((( newsh.Cells("Prop._VisDM_name") = sh.Cells("Prop._VisDM_name") For Each p In params newsh.Cells(p) = sh.Cells(p) Debug.Print "param " & p & " " & sh.Cells(p) Next p sh.Delete End If Next sh
End Sub
файлик тут http://rapidshare.de/files/48002171/replace.vsd.html |
|
Tumanov
Russia
1198 Posts |
Posted - 08/01/2009 : 05:09:58
|
Свойством объекта Cell по умолчанию является .ResultIU. То есть запись sh.Cells("Prop._VisDM_name") эквивалентна sh.Cells("Prop._VisDM_name").ResultIU. Свойство ResultIU возвращает результат Double, а у Вас в этой ячейке текст. Для текстовых ячеек нужно читать формулу, например sh.Cells("Prop._VisDM_name").Formula |
|
|
bdfy
Belarus
267 Posts |
Posted - 08/01/2009 : 08:39:07
|
понятно. заработало. непонятно другое. был в документе мастер "Х". я везде заменил на "Хnew". потом переименовал X в Xold, Xnew в X. и все равно - вытягиваю на страницу Х (новый мастер) - имя у него с Xnew начинается. вытягиваю программно Х Application.ActiveWindow.Page.Drop Application.ActiveDocument.Masters.ItemU("X"), 0, 0 старый мастер вытягивается. который теперь Хold называется. в чем дело ? как с именами разобратся ? |
|
|
Tumanov
Russia
1198 Posts |
Posted - 08/01/2009 : 10:17:51
|
Это (почти) уже обсуждалось. По разному ведут себя имена Name и NameU. Вот кусок оттуда: Ошибка проистекает из того, что шейпы в Visio имеют не одно имя. В данном случае конфликтуют имена Name и NameU. Name - это имя локализованное. Пользовательский интерфейс позволяет работать именно с ним. При локализации приложения, это имя обычно переводится. То есть в разных странах оно будет иметь разное значение. NameU - универсальное имя. Оно не изменяется при локализации и через него ведутся все ссылки в формулах шейп-листа. NameU через пользовательский интерфейс не доступно. У вновь созданного шейпа имени нет, есть только ID. Ссылки на такой шейп идут через имя NameID. Это сочетание Sheet и ID, например, Sheet.5. При первом присвоении имени через пользовательский интерфейс оно пишется и в Name, и в NameU. При дальнейшем переименовании NameU уже не изменяется, изменяется только Name. Вот это у Вас и происходит - Вы меняете локализованное имя, а в ссылках остается универсальное. Исправить универсальное имя можно, например, программно. Вот такой простейший макрос Sub ttt() ActiveWindow.Selection(1).NameU = "first" End Sub присвоит ему значение "first". |
|
|
bdfy
Belarus
267 Posts |
Posted - 08/01/2009 : 11:28:03
|
вспомнил ) не первый раз уже на эти грабли наступаю. не пришло в голову что это и на master шейпы распространяется. вот так решил quote: Sub ttt() Application.ActiveDocument.Masters.ItemU("X").Name = "Xold" Application.ActiveDocument.Masters.ItemU("X").NameU = "Xold"
Application.ActiveDocument.Masters.ItemU("Xnew").Name = "X" Application.ActiveDocument.Masters.ItemU("Xnew").NameU = "X"
End Sub
в надцатый раз с этим переименованием попадаю. скоро зарекусь какие то имена через GUI менять вообще. |
Edited by - bdfy on 08/01/2009 11:36:57 |
|
|
oleg753
26 Posts |
Posted - 05/11/2011 : 17:05:15
|
quote: Originally posted by Tumanov
Это (почти) уже обсуждалось. По разному ведут себя имена Name и NameU. Вот кусок оттуда: Ошибка проистекает из того, что шейпы в Visio имеют не одно имя. В данном случае конфликтуют имена Name и NameU. Name - это имя локализованное. Пользовательский интерфейс позволяет работать именно с ним. При локализации приложения, это имя обычно переводится. То есть в разных странах оно будет иметь разное значение. NameU - универсальное имя. Оно не изменяется при локализации и через него ведутся все ссылки в формулах шейп-листа. NameU через пользовательский интерфейс не доступно. У вновь созданного шейпа имени нет, есть только ID. Ссылки на такой шейп идут через имя NameID. Это сочетание Sheet и ID, например, Sheet.5. При первом присвоении имени через пользовательский интерфейс оно пишется и в Name, и в NameU. При дальнейшем переименовании NameU уже не изменяется, изменяется только Name. Вот это у Вас и происходит - Вы меняете локализованное имя, а в ссылках остается универсальное. Исправить универсальное имя можно, например, программно. Вот такой простейший макрос Sub ttt() ActiveWindow.Selection(1).NameU = "first" End Sub присвоит ему значение "first". Не знаю, туда ли я пишу, все же рискну. У меня мастер шейп назывался сначала "Модульный кабель". Я об этом узнал так: создал на странице его клон, далее правой кнопкой "формат", "специальный..." в открытом окне в строчке Образец надпись: "Модульный кабель:Страница" Далее я делал какие-то телодвижения с мастер шейпом и его имя стало "Модульный кабель.45" и теперь макрос не работает, как мне отредактировать это имя? |
|
|
Surrogate
Russia
122 Posts |
Posted - 05/11/2011 : 19:20:43
|
отредактировать имя можно также как и посмотреть. Формат->Специальный->Имя. вот только если имя "Модульный кабель" на странице уже есть, то переименовать не получится. Ибо нельзя сделать 2 шейпа на странице с одинаковыми именами!
может я конечно что-то не понял. у меня Visio англоязычный quote: в открытом окне в строчке Образец надпись: "Модульный кабель:Страница" Далее я делал какие-то телодвижения с мастер шейпом и его имя стало "Модульный кабель.45"
имя шейпа = надпись в строчке образец ?
† |
|
|
oleg753
26 Posts |
Posted - 05/12/2011 : 10:54:59
|
quote: Originally posted by Surrogate
отредактировать имя можно также как и посмотреть. Формат->Специальный->Имя. вот только если имя "Модульный кабель" на странице уже есть, то переименовать не получится. Ибо нельзя сделать 2 шейпа на странице с одинаковыми именами!
†
Это да, это все правильно, но относится к уникальному шейпу, а мне надо изменить имя мастер-шейпа, которое как я понял дописано в начале полного имени.
имя шейпа = надпись в строчке образец ? Нет, надпись в строчке образец = "Модульный кабель.45:Страница" а имя шейпа такое, как сам вводишь в строчке "Имя" в Данном случае "Модульный кабель.1645" И да, оно присваивается уникальным образом, проверяя на странице есть ли уже такое. Короче: мне надо убрать ".45" из надписи в строчке образец "Модульный кабель.45:Страница" |
Edited by - oleg753 on 05/12/2011 10:57:07 |
|
|
Surrogate
Russia
122 Posts |
Posted - 05/12/2011 : 14:28:27
|
Имя мастера-шейпа можно поменять в окне DocumentStencil, выбрать интересующий мастер. Щелкнуть правой клавишей мыши, и выбрать пункт переименовать ...
а вообще если нужно сделать на листе много однотипных шейпов, какой алгоритм работы? 1. Все шейпы вытаскиваются только из ДокументСтенсила. 2. Первые образцы шейпа берутся из ДокументСтенсила, дальше часть однотипных шейпов копируется на базе шейпов уже размещенных на листе.
как вариант могу допустить, что в ДокументСтенсиле уже есть мастер-шейп "Модульный кабель:Страница". если в него попытаться добавить модифицированный вариант мастершейпа, то для уникальности имени местершейпа к нему будет добавлен идентификатор например .45!
я сам не раз с последним вариантом накалывался :(
† |
|
|
oleg753
26 Posts |
Posted - 05/13/2011 : 06:32:38
|
quote: Originally posted by Surrogate
как вариант могу допустить, что в ДокументСтенсиле уже есть мастер-шейп "Модульный кабель:Страница". если в него попытаться добавить модифицированный вариант мастершейпа, то для уникальности имени местершейпа к нему будет добавлен идентификатор например .45!
я сам не раз с последним вариантом накалывался :(
†
В том то и вопрос, что в ДокументСтенсиле я удалил все стенсилы с именем "Модульный кабель" и их производных, но при создании нового стенсила "Модульный кабель" ему присваивается имя "Модульный кабель.х", где х - какой-то индекс. Такое ощущение, что в ДокументСтенсилескрытая индексация имен. В любом случае свою проблему я решил, создав в новом файле новый документстенсил и в нем свой мастер шейп, а потом просто скопировал его к себе. Surrogate, спасибо за участие.
|
|
|
|
Topic |
|
|
|