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