Получить слой соединителя
Могу ли я получить имя слоя, которому назначен соединитель в vba?
Я делаю это с такими формами
ActivePage.Shapes(1).layer(1)
И теперь я ищу что-то подобное, но для разъемов.
1 ответ
Я не совсем понимаю вашу проблему, но в разъемах нет ничего особенного - они все еще просто формы. Так что если вы знаете индекс вашей целевой фигуры и слоя, то вы можете использовать свой код выше.
Фигуры в Visio также могут принадлежать нескольким слоям (слои работают не так, как, скажем, в Photoshop), поэтому вам может понадобиться сначала подсчитать количество слоев, а затем выполнить каждый из них. Например:
Sub CheckLayers()
Dim shp As Visio.Shape
Dim i As Integer
For Each shp In ActivePage.Shapes
Debug.Print shp.NameU
For i = 1 To shp.LayerCount
Debug.Print " " & shp.Layer(i).Name
Next i
Debug.Print ""
Next shp
End Sub
Кроме того, в зависимости от того, что вы пытаетесь сделать, вы можете использовать метод Page.CreateSelection, чтобы вернуть выделение, основанное на фигурах в конкретном слое. Вот очень немного измененная версия из Visio SDK:
Public Sub CreateSelection_Layer_Example()
Dim vsoLayer As Visio.Layer
Dim vsoSelection As Visio.Selection
Set vsoLayer = ActivePage.Layers.ItemU("Connector")
Set vsoSelection = ActivePage.CreateSelection(visSelTypeByLayer, visSelModeSkipSuper, vsoLayer)
'Note that you don't have to pass the selection object to
'the ActiveWindow Selection property - you can just work
'with it directly if you want to
Application.ActiveWindow.Selection = vsoSelection
End Sub
Если вы используете динамический соединитель, он автоматически назначается слою с именем "Соединитель".