Огромное спасибо за помощь !
Однако, мне не помогло
Пусть переменная vShape есть анализируемый объект схемы - прямоугольник с текстом. Как его нашел - не важно.
Выполнение MsgBox(vShape.Text) подтверждает что нужный объект имеется. В схеме этот прямоугольник описывает операцию.
Теперь мне нужны соединенные с прямоугольником линии. Пока независимо от направления.
В переменную vCount = vShape.FromConnects.Count получаю количество соединений у прямоугольника.
Обратил внимание, если линия НЕ "привязана" к прямоугольнику (соединяется только визуально), такое "соединение" здесь не учитывается.
Пока нормально.
Далее цикл от 1 до vCount и vDot = vShape.FromConnects(vN) - перебираю соединения с прямоугольником.
У каждого соединения есть vDot.FromCell.Shape и vDot.ToCell.Shape.
Выбираю тот вариант, который не связан с исходным прямоугольником.
If vDot.FromCell.Shape.ID <> vShape.ID Then
Set vLine = vDot.FromCell.Shape
Else
Set vLine = vDot.ToCell.Shape
End If
Итого есть соединительная линия vLine.
Линии в схеме "надписал" и да, MsgBox(vLine.Text) выводит надписи линий.
Нормально.
Далее. Для каждой линии можно перебрать ее "соединители" на двух концах
For Each vConnect In vLine.Connects
'Один из "соединителей" привязан к моему прямоугольнику, а мне интересен противоположный.
If vConnector.FromCell.Shape.ID <> vShape.ID And vConnector.ToCell.Shape.ID <> vShape.ID Then
'Текущий "соединитель" линии НЕ связан с исходным прямоугольником - это нужный соединитель - нужная сторона линии
'Выбираю сторону "соединителя", которая связана не с линией
If vConnector.FromCell.Shape.ID <> vLine.ID Then
Set vNextShape = vConnector.FromCell.Shape
End If
If vConnector.ToCell.Shape.ID <> vLine.ID Then
Set vNextShape = vConnector.ToCell.Shape
End If
MsgBox ("Линия " & vLine.Text & " связывает анализируемый прямоугольник с блоком " & vNextShape.Text)
End If
Нормально.
НО ОСТАЛСЯ ВОПРОС.
Я могу узнать ОТСУТСТВИЕ стрелки на концах линии:
vLine.Cells("BeginArrow") = 0 ИЛИ vLine.Cells("EndArrow") = 0,
но я не могу узнать какой конец линии считается ее реальным началом. Тот который связан с анализируемым (исходным) прямоугольником или тот который связан с найденным связанным блоком.
Если узнаю сторону линии, соединенную с исходным прямоугольником, смогу проанализировать vLine.Cells("BeginArrow") = 0 ИЛИ vLine.Cells("EndArrow") = 0 и определить "входящая" связь или "исходящая".
У линии есть свойство FromCell.Shape.ID. Предположил, можно сравнить с vConnector.ID, но у vConnector нет свойства ID !
Вот такая проблема ...