Visio VBA Получить форму из выбора - PullRequest
0 голосов
/ 27 августа 2018

Мне нужна ссылка на выбранную (с помощью щелчка мыши, это должен быть только один выбор) фигуры в Visio. Однако форма может быть в группе. Кажется, я не могу заставить его работать, когда я выбираю фигуру в группе, объект shp остается пустым.

Sub selectTest()
    Dim sel As Visio.Selection
    Set sel = ActiveWindow.Selection
    Dim shp As Visio.Shape
    Set shp = sel.PrimaryItem

    If Not shp Is Nothing Then
        MsgBox "It worked"
    Else
        MsgBox "No shape in sel"
    End If        
End Sub

Когда выбрана группа «Верхний уровень», она работает. Когда выбирается фигура внутри группы, которая также может быть самой группой, это не так. Когда фигура, не входящая в группу, выбрана, она снова работает.

Контекст: я хочу запустить пользовательский код VBA из контекстного меню. Когда вы щелкаете правой кнопкой мыши форму, она выбирается автоматически.

Как я могу получить ссылку на фигуру, когда она находится в группе?

РЕДАКТИРОВАТЬ: для уточнения: все фигуры внутри моего документа имеют соответствующие записи базы данных. Я хочу (через XML) добавить пользовательскую кнопку Удалить в контекстное меню (это работает), это должно вызвать метод delete, который получает форму, по которой метод был вызван в качестве параметра, чтобы он мог искать соответствующую запись в БД и удалять что (а также записи любых подформ, если выбранная фигура является группой) перед удалением фигуры (и всех ее подформ) с помощью shape.delete

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Используйте свойство Selection.IterationMode, чтобы включить выбранные фигуры в выделение

Set sel = ActiveWindow.Selection
sel.IterationMode = 0
Set shp = sel.PrimaryItem
0 голосов
/ 27 августа 2018

Я не знаю Visio VBA, но попробую:

UPDATE

Sub selectTest()

    Dim x As Integer
    Dim sel As Visio.Selection
    Dim shp As Visio.Shape
    Dim inner_shape As Visio.Shape

    Set sel = ActiveWindow.Selection
    Set shp = sel.PrimaryItem

    For x = 1 To shp.Shapes.Count
        Set inner_shape = shp.Shapes(x)
        '// Do something with inner shape
    Next

End Sub
...