Получить слой соединителя

Могу ли я получить имя слоя, которому назначен соединитель в 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

Если вы используете динамический соединитель, он автоматически назначается слою с именем "Соединитель".

Другие вопросы по тегам