Excel VBA пытается изменить видимость фигур внутри группы

Я создал проект в Excel 2013, который показывает и скрывает большой список фигур (значки сети и текстовые поля) на основе данных в ячейках в верхней части листа. Моя цель состояла в том, чтобы создать графический интерфейс для ввода информации о сети, и при вводе значений в ячейки она будет отображаться на рисунке сети ниже. У меня все это работает, но я пошел, чтобы сгруппировать все фигуры (видимые и скрытые) чертежа в одну большую группу, чтобы я мог скопировать / вставить его в Power Point для презентации. Но как только я сгруппировал фигуры, я получаю ошибку времени выполнения "438": объект не поддерживает этот метод свойства.

Я пытаюсь найти способ продолжать управлять этими полями, но только внутри гигантской группы. Любая помощь будет отличной! О, и имя формы главной группы - "Group10".

Это быстрый пример кода, который я должен обновить при проектировании сети при вводе информации. Также я печатаю это вручную из автономной системы, так что помните о типе.

Private Sub WorkSheet_Change (ByVal Target As Range)
    If Range("s26").Value <> "" And Range("g26").Value <> "" Then
        ActiveSheet.Shapes("cloud1-group-p1").Visible = True
        ActiveSheet.Shapes("router1-group-p1").Visible = True
        ActiveSheet.Shapes("line1-group-p1").Visible = True
    Else
        ActiveSheet.Shapes("cloud2-group-p3").Visible = False
    End If
End Sub

Я также попытался посмотреть на создание массива всех известных фигур, которые я назвал х. Затем создайте фильтр для копирования только фигур в x в новый массив y, если форма была видимой. Затем скопируйте y. Но я ужасен с массивами. Так что я на этом LOL

2 ответа

Существует аккуратный способ скрыть / показать группу фигур. Скажем, у нас есть три прямоугольника на листе, как:

введите описание изображения здесь

Будет работать следующая техника цикла:

Sub dural2()
    ary = Array("Rectangle 1", "Rectangle 2", "Rectangle 3")
    For Each a In ary
        ActiveSheet.Shapes(a).Visible = True
    Next a
End Sub

работает просто отлично. Однако, пытаясь рассматривать их как группу, как:

Sub dural()
    ary = Array("Rectangle 1", "Rectangle 2", "Rectangle 3")
    ActiveSheet.Shapes(ary).Visible = True
End Sub

не удастся. Правильный способ избежать петли с помощью ShapeRange:

Sub dural3()
    Dim shr As ShapeRange, s As Shape
    Dim ary()
    i = 1
    For Each s In ActiveSheet.Shapes
            ReDim Preserve ary(1 To i)
            ary(i) = s.Name
            i = i + 1
    Next s
    Set shr = ActiveSheet.Shapes.Range(ary)
    shr.Visible = True
End Sub

Для доступа к фигуре в группе используйте GroupItems как это

Sub Demo()
    Dim ws As Worksheet
    Dim ShapeGroup As Shape
    Dim AShape As Shape

    Set ws = ActiveSheet
    Set ShapeGroup = ws.Shapes("Group10")
    Set AShape = ShapeGroup.GroupItems("ShapeToHide")
    AShape.Visible = False
End Sub
Другие вопросы по тегам