Справочная информация: У меня есть код, который проходит через страницу Visio и возвращает все фигуры. Многие из этих фигур находятся в контейнерах, поэтому я хотел бы знать, какому контейнеру принадлежит форма.
Оригинальный подход: Я надеялся получить «родительский» контейнер для каждой фигуры ( Мне нужен только один уровень контейнера, в контейнерах нет контейнеров) с использованием свойства Shape.ContainedShape, но он возвращал только 0 для каждой фигуры.
Если у кого-то есть решение о том, как я первоначально пытался чтобы получить контейнер, это было бы самым элегантным. Но так как я не могу заставить это работать, я пробую следующую альтернативу, которая также представляет контрольно-пропускной пункт.
Текущий подход: Я смог получить список всех контейнеры на странице, и теперь я хотел бы получить формы элементов для каждого контейнера. Это не так чисто, но это позволило бы мне сделать перекрестные ссылки на фигуры и получить контейнеры, к которым они принадлежат.
Проблема: При попытке выполнить «Ошибка 13 несоответствие типов» создайте массив, в котором столбец 0 будет именем контейнера, а столбец 1 - формами элементов.
' Create array of containers and member shapes
Dim arr() As Long
Dim vsoMemberShape As Shape
Dim vsoContainerShape As Shape
Dim containerArr() As Long
Dim rows As Integer
Dim i As Integer
For Each ContainerID In vsoPage.GetContainers(visContainerIncludeNested)
Set vsoContainerShape = vsoPage.Shapes.ItemFromID(ContainerID)
arr = vsoContainerShape.ContainerProperties.GetMemberShapes(1)
rows = UBound(arr)
ReDim containerArr(0 To rows, 0 To 1)
For i = 0 To UBound(arr)
Set memberShape = vsoPage.Shapes.ItemFromID(arr(i))
containerArr(i, 0) = vsoContainerShape.NameU
containerArr(i, 1) = vsoMemberShape.NameU
Next
Next
' The following code is in a For loop, not shown
' shapeToName is what I want to compare to the member shapes in the container
' array defined above, and then retrieve the corresponding container
' This is where the error is popping up
shapeToName = CStr(vsoShapeTo.Name)
Dim x As Integer
x = Application.Match(shapeToName, Application.Index(containerArr, 0, 1), 0)
shapeContainer = containerArr(x, 1)