VBA в MS Visio - подсветка разъемов выбранной формы - PullRequest
0 голосов
/ 25 октября 2018

После выбора формы (например, квадрат или более квадратов) все соединители, приклеенные к этой форме, будут выделять красный, желтый независимо от того.Найденный ниже код не работает для меня, совет?(Я не кодер, поэтому, пожалуйста, наберитесь терпения)

Set shpAtEnd = cnx(1).ToSheet
' use HitTest to determine whether Begin end of connector
' is outside shpAtEnd
x = shpAtEnd.HitTest(shpTaskLink.Cells("BeginX"), _
shpTaskLink.Cells("BeginY"), 0.01)

If x = visHitOutside Then
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 2
Else
    ' do other stuff
End If

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Это мой первый ответ на stackoverflow, и я надеюсь, что следующий код VBA может решить вашу проблему с тем, как выделить соединители или связанные фигуры в Visio!

Public Sub HighlightConnectedShapes()

    Dim vsoShape As Visio.Shape
    Dim connectedShapeIDs() As Long
    Dim connectorIDs() As Long
    Dim intCount As Integer

    ' Highlight the selected shape
    Set vsoShape = ActiveWindow.Selection(1)
    vsoShape.CellsU("Fillforegnd").FormulaU = "RGB(146, 212, 0)"
    vsoShape.Cells("LineColor").FormulaU = "RGB(168,0,0)"
    vsoShape.Cells("LineWeight").Formula = "2.5 pt"

     ' Highlight connectors from/to the selected shape
    connectorIDs = vsoShape.GluedShapes _
      (visGluedShapesAll1D, "")
    For intCount = 0 To UBound(connectorIDs)
        ActivePage.Shapes.ItemFromID(connectorIDs(intCount)).Cells("LineColor").FormulaU = "RGB(168,0,0)"
        ActivePage.Shapes.ItemFromID(connectorIDs(intCount)).Cells("LineWeight").Formula = "2.5 pt"
    Next

    ' Highlight shapes that are connected to the selected shape
    connectedShapeIDs = vsoShape.connectedShapes(visConnectedShapesAllNodes, "")
    For intCount = 0 To UBound(connectedShapeIDs)
        ActivePage.Shapes.ItemFromID(connectedShapeIDs(intCount)).Cells("LineColor").FormulaU = "RGB(168,0,0)"
        ActivePage.Shapes.ItemFromID(connectedShapeIDs(intCount)).Cells("LineWeight").Formula = "2.5 pt"
    Next

End Sub

Чтобы запустить макрос, вы можете рассмотреть возможность его ассоциированияс поведением двойного щелчка фигур.

Если вам нужно только выделить входящие / исходящие соединители и входящие / исходящие формы, замените visGluedShapesAll1D на visGluedShapesIncoming1D / visGluedShapesOutgoing1D и visConnectedShapesAllNodes с visConnectedShapesIncomingNodes / visConnectedShapesOutgoingNodes.

Узнайте больше на visgluedshapesflags и visconnectedshapesflags .Удачи!

0 голосов
/ 26 октября 2018

Следующий код будет зациклен, хотя все 1d-фигуры приклеены к первой фигуре в вашем выделении и запишут их имя в окно Immediate.Это должно быть хорошей отправной точкой.

В Visio нет события, которое запускается, если выбрана форма (по крайней мере, без каких-либо обходных путей), поэтому возможно связать макрос с привязкой клавиш.

Флаг visGluedShapesAll1D можно заменить другим фильтром, как описано здесь: Справочник по Microsoft Office

Sub colorConnectors()

    If ActiveWindow.Selection(1) Is Nothing Then Exit Sub

    Dim selectedShape   As Shape
    Set selectedShape = ActiveWindow.Selection(1)

    Dim pg   As Page
    Set pg = ActivePage


    Dim gluedConnectorID As Variant 'variant is needed because of "For Each" Loop

    For Each gluedConnectorID In selectedShape.GluedShapes(visGluedShapesAll1D, "")
        Debug.Print pg.Shapes.ItemFromID(gluedConnectorID).NameU
    Next gluedConnectorID

End Sub
...