Я думаю, что вы хотите выбрать подгруппу в группе программно. Делать это в Visio неочевидно, поэтому позвольте мне помочь. Я размещу ссылки на две статьи на моем веб-сайте , плюс одну на Microsoft в конце поста. Они обсуждают темы, связанные с выбором, более подробно.
Итак, давайте рассмотрим вашу проблему ...
Настройка
- Открыть пустой чертеж в Visio
- Нарисуйте два прямоугольника, затем сгруппируйте их
Теперь у вас есть три фигур на этой странице.
- Лист. 1 представляет собой подвид
- Лист. 2 представляет собой подвид
- Лист. 3 - это группа
Вы можете программно выбрать такую группу, как вы обнаружили:
Public Sub SelectGroup()
'// Get the active window:
Dim win As Visio.Window
Set win = Visio.ActiveWindow
'// Deselect everything:
Call win.DeselectAll
'// Get a shape object:
Dim shp As Visio.Shape
Set shp = Visio.ActivePage.Shapes.ItemFromID(3) '<<----- Sheet.3 is the group!
'// Cause that shape to be selected in the window:
Call win.Select(shp, Visio.VisSelectArgs.visSelect)
'// Cleanup:
Set shp = Nothing
Set win = Nothing
End Sub
Кстати, подпункт выше гораздо более придирчиво и длиннее, чем должно быть. Но это поможет сделать вещи простыми и понятными, когда вы начнете добавлять функции и поведение. На самом деле вы можете в одну строчку полностью выполнить всю процедуру, как эта, - вы даже можете вставить ее в окно «Немедленно»:
Call Visio.ActiveWindow.Select(Visio.ActivePage.Shapes.ItemFromID(3), Visio.VisSelectArgs.visDeselectAll + Visio.VisSelectArgs.visSelect)
Теперь, чтобы выбрать «Лист 1» или «Лист 2». Можно было бы подумать, что мы могли бы просто изменить объект shp на один из подвидов, ала:
'// Sheet.1 is a subshape, you'll get an error
Set shp = Visio.ActivePage.Shapes.ItemFromID(1) '<<----- ID = 1
, но это не сработает. Фактически вы получите ошибку «Неправильный целевой объект для этого действия».
Чтобы исправить это, мы должны передать другой аргумент методу Select :
Public Sub SelectSubshape()
'// We've drawn two rectangles on a blank page, then
'// grouped them. Sheet.1 and Sheet.2 are subshapes,
'// Sheet.3 is the group.
'// Get the active window:
Dim win As Visio.Window
Set win = Visio.ActiveWindow
'// Deselect everything:
Call win.DeselectAll
'// Get a subshape object:
Dim shp As Visio.Shape
Set shp = Visio.ActivePage.Shapes.ItemFromID(2)
'// Cause that shape to be SUBSELECTED in the window.
'// Note the different argument: visSubSelect
Call win.Select(shp, Visio.VisSelectArgs.visSubSelect) ' <<------ visSubSelect!
'// Cleanup:
Set shp = Nothing
Set win = Nothing
End Sub
Вуаля! Subshape выделен в активном окне!
Если вы хотите определить, какие фигуры уже выбраны, вам придется поиграться со свойством IterationMode объекта Selection. Это довольно странно, плюс я не думаю, что вы просите об этом прямо сейчас. Но знание этого термина поможет вам искать помощь в будущем, если она вам понадобится.
Статьи
Получение справки о выборе и выборе форм Visio
Программно определять выбранные фигуры
Выбор. Выбор метода (Visio)