Author |
Topic |
|
VladimirALenin
5 Posts |
Posted - 05/13/2008 : 16:49:59
|
Есть макрос, который рисует два сервера, соединеяет иx с помощью "Dynamic connector", а затем преобразует его в "Straight Connector". Все обращения к элементам происходят через ItemFromID(31), где 31 - это значение ObjectID Цитата: Property ItemFromID(ObjectID As Long) As Document
откуда вытащить, как получить это ObjectID ?
Текст макроса (рисовал схему, записывался макрос): Цитата: Sub Macro1()
Application.Windows.ItemEx("Drawing1").Activate Application.ActiveWindow.Page.Drop Application.Documents.Item("PERIPH_M.VSS").Masters.ItemU("Server"), 2.007874, 6.692913
Application.Windows.ItemEx("Drawing1").Activate Application.ActiveWindow.Page.Drop Application.Documents.Item("PERIPH_M.VSS").Masters.ItemU("Server"), 5.748031, 1.377953
Dim UndoScopeID1 As Long UndoScopeID1 = Application.BeginUndoScope("Drop On Page") Application.Windows.ItemEx("Drawing1").Activate Application.ActiveWindow.Page.Drop Application.Documents.Item("Drawing1").Masters.ItemU("Dynamic connector"), 0#, 0# Dim vsoCell1 As Visio.Cell Dim vsoCell2 As Visio.Cell Set vsoCell1 = Application.ActiveWindow.Page.Shapes.ItemFromID(31).CellsU("BeginX") Set vsoCell2 = Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(7, 0, 0) vsoCell1.GlueTo vsoCell2 Set vsoCell1 = Application.ActiveWindow.Page.Shapes.ItemFromID(31).CellsU("EndX") Set vsoCell2 = Application.ActiveWindow.Page.Shapes.ItemFromID(16).CellsSRC(7, 0, 0) vsoCell1.GlueTo vsoCell2 Application.EndUndoScope UndoScopeID1, True
Dim UndoScopeID2 As Long UndoScopeID2 = Application.BeginUndoScope("Straight Connector") Application.ActiveWindow.Page.Shapes.ItemFromID(31).CellsSRC(visSectionObject, visRowShapeLayout, visSLOLineRouteExt).FormulaU = 1 Application.ActiveWindow.Page.Shapes.ItemFromID(31).CellsSRC(visSectionObject, visRowShapeLayout, visSLORouteStyle).FormulaU = 16 Application.EndUndoScope UndoScopeID2, True
Application.ActiveWindow.DeselectAll
End Sub
Заранее благодарю! |
|
Tumanov
Russia
1198 Posts |
Posted - 05/13/2008 : 17:59:52
|
ObjectID - свойство, возвращающее объект, в данном случае шейп. Вам проще получить ссылку на шейп другим образом. Вместо Application.ActiveWindow.Page.Drop Application.Documents.Item("Drawing1").Masters.ItemU("Dynamic connector"), 0#, 0# использовать Set ShapeConnector = Application.ActiveWindow.Page.Drop Application.Documents.Item("Drawing1").Masters.ItemU("Dynamic connector"), 0#, 0# Тогда ниже везде вместо Application.ActiveWindow.Page.Shapes.ItemFromID(31) можно будет писать просто ShapeConnector Например, Set vsoCell1 = ShapeConnector.CellsU("BeginX")
|
|
|
VladimirALenin
5 Posts |
Posted - 05/13/2008 : 20:29:32
|
Tumanov, СПАСИБО! Но это лишь позволит сократить код макроса. Возможно, я "криво" сформулировал конечную цель. Макрос должен соединять объекты, которые уже нарисованы.
Для этого нужно либо в процессе их переноса на лист определять их ObjectID, либо просканировать все объекты, которые уже нарисованы и для каждого определить его номер. Я не могу догадаться как же подобраться к номеру объекта.
Нумерация хитрая: "pc" нумеруются с шагом объекта 27, т.е. если первый был 1, то второй будет 28. "Server" с шагом 15. "Switch" с шагом 25. Т.е. у каждого шэйпа свой "шаг" нумерации.
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 05/14/2008 : 04:15:47
|
Нет. Сокращение кода - это мелкий побочный эффект. Основное - это то, что у Вас появляется ссылка на объект, которую Вы можете использовать вместо нумерации. А искать закономерности в нумерации бесполезное занятие. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 05/14/2008 : 04:54:11
|
Хотя, используя ссылку, Вы можете и номер получить. Например, ObjectID = ShapeConnector.ID |
|
|
VladimirALenin
5 Posts |
Posted - 05/15/2008 : 12:59:01
|
Tumanov, СПАСИБО! Это то, что мне было нужно. |
|
|
|
Topic |
|
|
|