Vba excel скрыть фигуру

 

ttt480

Пользователь

Сообщений: 395
Регистрация: 17.12.2015

Можно ли скрыть автофигуру эксель?  Допустим есть автофигура — овал. Я жму на кнопку запуска макроса — и фигура исчезает, становится просто невидимой, так что на ее месте — находятся обычные ячейки, которые можно заполнять. Жму на другую кнопку — и автофигура вновь появляется.  

Но она должна появлятся — не как рисунок, а именно как автофигура, чтобы можно было провести изменение узлов на ней или изменить толщину контура — в общем работать с ней как с обычной автофигурой.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Ctrl+6 — скрыть/показать объекты

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#3

27.09.2016 10:34:29

В код макроса, который вызывается по нажатию на фигуре добавляете строку:

Код
ActiveSheet.Shapes(Application.Caller).Visible = False

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

ttt480

Пользователь

Сообщений: 395
Регистрация: 17.12.2015

В общем добавил макрос…

Теперь другая проблема — как автофигуру обратно вытащить.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

И в какой же момент её планируете вытаскивать? Нажали — скрылась. А вытаскивать когда? Вы не стесняйтесь, озвучивайте условия :)

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

ttt480

Пользователь

Сообщений: 395
Регистрация: 17.12.2015

Там есть второй кружок — при нажатии на него — скрывшаяся ранее фигура —  должна снова появится.
То есть это, наверное должен быть другой макрос, привязанный к верхней автофигуре — ответственный за появление нижней автофигуры.

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#7

27.09.2016 11:41:14

ну и что мешает присмотреться к моему коду и подумать? :)

Код
ActiveSheet.Shapes("имя_отображаемой_фигуры").Visible = True

имя фигуры можно увидеть, выделив для редактирования фигуру и посмотрев в окно адреса(левее строки формул).

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Один код на два действия: если фигура скрыта, то…

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#9

27.09.2016 11:49:39

Цитата
vikttur написал: Один код на два действия

а как же код сработает при скрытой фигуре, если он запускается нажатием на фигуру?

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#10

27.09.2016 11:54:09

Как я понял, скрывать можно себя, открывать другой фигурой:

Код
Sub Oval1_Щелчок(): Call FT: End Sub
Sub Oval2_Щелчок(): Call FT: End Sub

Sub FT()
    With ActiveSheet.Shapes(Application.Caller)
        .Visible = Not .Visible
    End With
End Sub
 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

при втором щелчке Application.Caller будет уже другой…Это будет Oval2.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

ttt480

Пользователь

Сообщений: 395
Регистрация: 17.12.2015

Вот теперь-то все заработало.

Спасибо за помощь.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#13

27.09.2016 12:00:24

Цитата
The_Prist написал: при втором щелчке Application.Caller будет уже другой…

Точно, не сообразил…

Фактически, определенная форма может быть скрыта или отображена в зависимости от значения указанной ячейки. Вам может помочь следующий метод.

Скрыть или отобразить определенную фигуру на основе указанного значения ячейки с кодом VBA


Скрыть или отобразить определенную фигуру на основе указанного значения ячейки с кодом VBA

Например, вы хотите отобразить определенную фигуру при вводе числа 1 в ячейку A1 или скрыть эту фигуру, если ячейка A1 имеет другие значения. Для этого запустите следующий код VBA.

1. Щелкните правой кнопкой мыши вкладку листа, содержащую фигуру, которую вы хотите скрыть или показать, затем щелкните Просмотреть код из контекстного меню.

2. Затем Microsoft Visual Basic для приложений всплывает окно. Скопируйте и вставьте приведенный ниже код VBA в Code окно.

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

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And Target.Column = 1 Then _
        Me.Shapes("Oval 6").Visible = (Cells(1, 1).Value = 1)
End Sub

Заметки: В коде:

1) Ряд = 1 и Столбец = 1 укажите конкретную ячейку, которая находится в первой строке и первом столбце, Cells (1, 1) — это соответствующая ячейка A1.

2) Значение = 1, число 1 — это конкретное значение, на основе которого вы хотите отобразить форму.

3) «Овал 6»- это название определенной формы.

Вы можете изменить их по своему усмотрению.

3. нажмите другой + Q клавиши одновременно, чтобы закрыть Microsoft Visual Basic для приложений окно.

Отныне при вводе числа 1 в ячейку A1 фигура «Овал 6» не скрывается. Но если вы введете другое значение, например число 2, в ячейку A1, форма «Овал 6» сразу же скроется.


Статьи по теме:

  • Как добавить указатель мыши к определенной форме в Excel?
  • Как автоматически изменить размер формы на основе / в зависимости от указанного значения ячейки в Excel?
  • Как заполнить фигуру прозрачным цветом фона в Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (11)


Оценок пока нет. Оцените первым!

Работа с фигурами в VBA Excel: создание фигур методом Shapes.AddShape, типы фигур (MsoAutoShapeType), обращение к фигурам и изменение их свойств. Примеры.

Объекты для работы с фигурами

Фигуры в VBA Excel представлены тремя объектами:

Объект Описание
Shapes Коллекция всех фигур на рабочем листе. Используется для создания новых фигур, для обращения к одной фигуре по имени и для перебора фигур циклом.
ShapeRange Коллекция нескольких фигур, аргументом которой является массив имен выбранных объектов. Используется для редактирования сразу всех фигур, входящих в эту коллекцию.
Shape Объект, представляющий одну фигуру. Используется для редактирования одной этой фигуры.

Фигуры в VBA Excel создаются методом Shapes.AddShape.

Синтаксис метода AddShape

Shapes.AddShape (Type, Left, Top, Width, Height)

Shapes — выражение, возвращающее коллекцию фигур на рабочем листе, например: ActiveSheet.Shapes.

Параметры метода AddShape

Параметр Описание
Type Константа из коллекции MsoAutoShapeType, определяющая тип создаваемой фигуры.
Left Расстояние от левой границы фигуры до левой границы табличной части рабочего листа в пунктах.. Тип данных — Single.
Top Расстояние от верхней границы фигуры до верхней границы табличной части рабочего листа в пунктах.. Тип данных — Single.
Width Ширина фигуры по внешним границам в пунктах.
Height Высота фигуры по внешним границам в пунктах.

Все параметры метода Shapes.AddShape являются обязательными.

Константы MsoAutoShapeType

Константы коллекции MsoAutoShapeType, определяющие основные типы создаваемых фигур:

Константа Значение Тип фигуры
msoShapeRectangle 1 Прямоугольник
msoShapeParallelogram 2 Параллелограмм
msoShapeTrapezoid 3 Трапеция
msoShapeDiamond 4 Ромб
msoShapeRoundedRectangle 5 Прямоугольник: скругленные углы
msoShapeOctagon 6 Восьмиугольник (октаэдр)
msoShapeIsoscelesTriangle 7 Равнобедренный треугольник
msoShapeRightTriangle 8 Прямоугольный треугольник
msoShapeOval 9 Овал
msoShapeHexagon 10 Шестиугольник (гексаэдр)
msoShapeCross 11 Крест
msoShapeRegularPentagon 12 Пятиугольник (пентаэдр)
msoShapeCan 13 Цилиндр
msoShapeCube 14 Куб
msoShapeDonut 18 Круг: прозрачная заливка (кольцо)
msoShapeLightningBolt 22 Молния
msoShapeSun 23 Солнце
msoShapeMoon 24 Месяц (луна)
msoShape5pointStar 92 Звезда: 5 точек (пятиконечная)
msoShapeCloud 179 Облако

Все доступные константы из коллекции MsoAutoShapeType смотрите на сайте разработчиков.

Создание объекта ShapeRange

Создание коллекции ShapeRange из выбранных фигур:

Dim myShapeRange As ShapeRange

Set myShapeRange = ActiveSheet.Shapes.Range(Array(«Пятиугольник 140», «Солнце 141», «Облако 144»))

Объектная переменная myShapeRange не обязательна, можно обратиться непосредственно к возвращенной коллекции, например, присвоив всем ее элементам синий цвет:

ActiveSheet.Shapes.Range(Array(«Пятиугольник 140», «Солнце 141», «Облако 144»)).Fill.ForeColor.RGB = vbBlue

Примеры работы с фигурами

Пример 1

Создание пяти разных фигур из кода VBA Excel методом Shapes.AddShape:

Sub Primer1()

    With ActiveSheet.Shapes

        ‘При создании фигуры без присвоения ее переменной скобки не нужны

        .AddShape msoShapeCube, 30, 40, 72, 72

        .AddShape msoShapeIsoscelesTriangle, 130, 40, 72, 72

        .AddShape msoShapeSun, 230, 40, 72, 72

        .AddShape msoShapeLightningBolt, 330, 40, 72, 72

        ‘Чтобы выбрать фигуру, параметры необходимо заключить в скобки

        .AddShape(msoShapeCloud, 430, 40, 72, 72).Select

    End With

End Sub

Результат работы кода:

Фигуры на листе Excel

Пример 2

Работа с одной фигурой:

Sub Primer2()

Dim myShape As Shape

‘Создаем фигуру «Месяц» и присваивает ссылку на нее переменной myShape

Set myShape = ActiveSheet.Shapes.AddShape(msoShapeMoon, 50, 50, 80, 80)

    With myShape

        ‘Меняем высоту и ширину фигуры

        .Height = 150

        .Width = 100

        ‘Меняем цвет фигуры

        .Fill.ForeColor.RGB = vbYellow

        ‘Поворачиваем фигуру влево на 40 градусов

        .Rotation = 40

    End With

End Sub

Пример 3

Редактирование одновременно нескольких фигур с помощью коллекции ShapeRange:

Sub Primer3()

    With ActiveSheet.Shapes.Range(Array(«Овал 1», «Овал 2», «Овал 3»))

        ‘Меняем цвет всех фигур из коллекции ShapeRange

        .Fill.ForeColor.RGB = vbBlue

        ‘Задаем высоту и ширину овалов

        .Height = 150

        .Width = 50

        ‘Поворачиваем фигуры вправо на 45 градусов

        .Rotation = 45

    End With

End Sub

Пример 4

Редактирование одновременно всех фигур на рабочем листе с помощью коллекции ShapeRange:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Sub Primer4()

Dim myShapeRange As ShapeRange, i As Integer, _

myShape As Shape, myArray() As String

‘Задаем массиву размерность от 1 до количества фигур на листе

ReDim myArray(1 To ActiveSheet.Shapes.Count)

    ‘Проходим циклом по всем фигурам коллекции и записываем их имена в массив

    For Each myShape In ActiveSheet.Shapes

        i = i + 1

        myArray(i) = myShape.Name

    Next

‘Создаем коллекцию ShapeRange и присваиваем ссылку на нее переменной myShapeRange

Set myShapeRange = ActiveSheet.Shapes.Range(myArray)

    With myShapeRange

        ‘Изменяем цвет всех фигур на рабочем листе

        .Fill.ForeColor.RGB = RGB(100, 150, 200)

        ‘Поворачиваем все фигуры вокруг вертикальной оси

        .Flip msoFlipVertical

    End With

End Sub

Пример 5

Добавление надписи (текста) на фигуру:

Sub Primer5()

Dim myShape As Shape

Set myShape = ActiveSheet.Shapes.AddShape(msoShapeCloud, 50, 30, 300, 300)

    With myShape.TextFrame2

        ‘Добавление текста на фигуру

        .TextRange.Characters.Text = «Объект TextFrame представляет текстовую рамку в объекте Shape. Содержит текст в текстовом кадре, а также свойства и методы, которые контролируют выравнивание и закрепление текстового кадра.»

        ‘Задаем курсивное начертание

        .TextRange.Characters.Font.Italic = True

        ‘Указываем размер шрифта

        .TextRange.Characters.Font.Size = 13

        ‘Отступ левой границы текстового поля от левой внутренней границы фигуры

        .MarginLeft = 30

        ‘Отступ верхней границы текстового поля от верхней внутренней границы фигуры

        .MarginTop = 20

    End With

End Sub

Результат работы кода:

Фигура Облако с надписью

Изменить цвет текста, например на черный, можно двумя способами:

‘С помощью константы MsoThemeColorIndex

myShape.TextFrame2.TextRange.Characters.Font.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1

‘С помощью цветовой модели RGB

myShape.TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)

С константами из коллекции MsoThemeColorIndex вы можете ознакомиться на сайте разработчиков.

Пример 6

Удаление фигур с рабочего листа из кода VBA Excel с помощью метода Delete.

Удаление одной фигуры:

ActiveSheet.Shapes(«Ромб 5»).Delete

Удаление нескольких фигур:

ActiveSheet.Shapes.Range(Array(«Овал 1», «Овал 2», «Овал 3»)).Delete

Удаление всех фигур с рабочего листа с помощью цикла:

Sub Primer6()

Dim myShape As Shape

    For Each myShape In ActiveSheet.Shapes

        myShape.Delete

    Next

End Sub

В 7 примере рассмотрено удаление всех фигур без цикла.

Пример 7

Выделение всех фигур на рабочем листе:

ActiveSheet.Shapes.SelectAll

Выбор всех фигур и удаление выбранного (всех фигур):

Sub Primer7()

    ActiveSheet.Shapes.SelectAll

    Selection.Delete

End Sub


Продолжение темы в статье VBA Excel. Копирование, перемещение и поворот фигур.


  • If you would like to post, please check out the MrExcel Message Board FAQ and register here. If you forgot your password, you can reset your password.

  • Thread starter

    RLJ

  • Start date

    Oct 4, 2012

RLJ

Active Member


  • #1

I need to hide Rectangle 19 based upon the code below, but it gives an error when it gets to the line for Shapes.

Code:

Private Sub ComboBox1_Change()
    Dim AM As String
    
    AM = Range("Amenity_Type").Value
    Application.ScreenUpdating = False
        Range(AM).Copy
        Range("Amenities_Variable").PasteSpecial Paste:=xlPasteValues
        Range("C26").Select
        
            'If Prop Type = Office then Rectangle 19 needs to be visable, else hidden
            If Range("Prop_Type_Change").Value = "Office" Then
                    CheckBox11.Visible = True
                    ActiveSheet.Shapes("Rectangle 19").Visable
                Else
                    CheckBox11.Visible = False
            End If
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
End Sub

Thanks for your help

Which Excel functions can ignore hidden rows?

The SUBTOTAL and AGGREGATE functions ignore hidden rows. AGGREGATE can also exclude error cells and more.

shg

shg

MrExcel MVP


  • #2

ActiveSheet.Shapes(«Rectangle 19»).Visible = False

rollis13

FormR

Threads
1,192,599
Messages
5,993,430
Members
440,486
Latest member
SS Rookie

Содержание

  1. Делаем фигуры невидимыми/видимыми в excel через VBA
  2. 5 ответов
  3. VBA Excel. Работа с фигурами (Shapes)
  4. Объекты для работы с фигурами
  5. Создание фигур в VBA Excel
  6. Синтаксис метода AddShape
  7. Параметры метода AddShape
  8. Константы MsoAutoShapeType
  9. Создание объекта ShapeRange
  10. Работа с фигурами (объектами-рисунками)
  11. Задание свойств для фигуры
  12. Применение свойства или метода к нескольким фигурам одновременно
  13. Создание коллекции ShapeRange, содержащей все фигуры на листе
  14. Применение свойства или метода к коллекции ShapeRange
  15. Циклический просмотр коллекций Shapes или ShapeRange
  16. Выравнивание, распределение и группирование фигур в ShapeRange
  17. См. также
  18. Поддержка и обратная связь
  19. VBA Показать / Скрыть изображения или фигуры при нажатии кнопки «Событие» для сортировки данных
  20. 2 ответа

Делаем фигуры невидимыми/видимыми в excel через VBA

У меня возникла эта проблема в течение последних нескольких часов, и я был бы очень признателен за помощь.

По сути, я хочу иметь возможность скрывать/показывать фигуры в зависимости от выбора, который пользователь делает в пользовательской форме. Я разбил проблему на очень простой пример. Если я вставлю на лист фигуру под названием «овал 1» и запущу код:

Форма исчезает, но когда я запускаю этот код

Я получаю сообщение об ошибке «Запрошенные фигуры заблокированы для выбора»

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

Любые идеи, что вызывает это.

5 ответов

Я скрываю фигуры на основе их имени, поскольку некоторые фигуры я не хочу скрывать. Я использую этот формат: Sheet1.Shapes.Range(Array(«COtxtBox1»)).Visible = msoTrue

Имя вашей фигуры или фигур входит в массив

Если это только 1 форма, которую вы могли бы просто использовать:

Я обнаружил, что часть «mso» не нужна для утверждения True или False.

Вы не можете Select скрытый объект. Однако вам вообще не нужно использовать Select , и обычно это не рекомендуется. Попробуйте просто:

Я решил проблему с этим кодом (Oval = Type 9, from Перечисление MsoAutoShapeType (Office)):

Если «Type = 9» неверно, вы можете узнать тип вашей фигуры с помощью кода в окне Непосредственно (ctrl+G в VBA):

Источник

VBA Excel. Работа с фигурами (Shapes)

Работа с фигурами в VBA Excel: создание фигур методом Shapes.AddShape, типы фигур (MsoAutoShapeType), обращение к фигурам и изменение их свойств. Примеры.

Объекты для работы с фигурами

Фигуры в VBA Excel представлены тремя объектами:

Объект Описание
Shapes Коллекция всех фигур на рабочем листе. Используется для создания новых фигур, для обращения к одной фигуре по имени и для перебора фигур циклом.
ShapeRange Коллекция нескольких фигур, аргументом которой является массив имен выбранных объектов. Используется для редактирования сразу всех фигур, входящих в эту коллекцию.
Shape Объект, представляющий одну фигуру. Используется для редактирования одной этой фигуры.

Создание фигур в VBA Excel

Фигуры в VBA Excel создаются методом Shapes.AddShape.

Синтаксис метода AddShape

Shapes — выражение, возвращающее коллекцию фигур на рабочем листе, например: ActiveSheet.Shapes.

Параметры метода AddShape

Параметр Описание
Type Константа из коллекции MsoAutoShapeType, определяющая тип создаваемой фигуры.
Left Расстояние от левой границы фигуры до левой границы табличной части рабочего листа в пунктах.. Тип данных — Single.
Top Расстояние от верхней границы фигуры до верхней границы табличной части рабочего листа в пунктах.. Тип данных — Single.
Width Ширина фигуры по внешним границам в пунктах.
Height Высота фигуры по внешним границам в пунктах.

Все параметры метода Shapes.AddShape являются обязательными.

Константы MsoAutoShapeType

Константы коллекции MsoAutoShapeType, определяющие основные типы создаваемых фигур:

Константа Значение Тип фигуры
msoShapeRectangle 1 Прямоугольник
msoShapeParallelogram 2 Параллелограмм
msoShapeTrapezoid 3 Трапеция
msoShapeDiamond 4 Ромб
msoShapeRoundedRectangle 5 Прямоугольник: скругленные углы
msoShapeOctagon 6 Восьмиугольник (октаэдр)
msoShapeIsoscelesTriangle 7 Равнобедренный треугольник
msoShapeRightTriangle 8 Прямоугольный треугольник
msoShapeOval 9 Овал
msoShapeHexagon 10 Шестиугольник (гексаэдр)
msoShapeCross 11 Крест
msoShapeRegularPentagon 12 Пятиугольник (пентаэдр)
msoShapeCan 13 Цилиндр
msoShapeCube 14 Куб
msoShapeDonut 18 Круг: прозрачная заливка (кольцо)
msoShapeLightningBolt 22 Молния
msoShapeSun 23 Солнце
msoShapeMoon 24 Месяц (луна)
msoShape5pointStar 92 Звезда: 5 точек (пятиконечная)
msoShapeCloud 179 Облако

Все доступные константы из коллекции MsoAutoShapeType смотрите на сайте разработчиков.

Создание объекта ShapeRange

Создание коллекции ShapeRange из выбранных фигур:

Источник

Работа с фигурами (объектами-рисунками)

Фигуры, или объекты-рисунки, представлены тремя разными объектами:

Объект Описание
Коллекция фигур Используйте для создания фигур и итерации всех фигур на заданном листе.
Коллекция ShapeRange Используйте для изменения нескольких фигур так же, как и с несколькими фигурами в пользовательском интерфейсе.
Объект Shape Используйте для форматирования или изменения одной фигуры.

Задание свойств для фигуры

Многие параметры форматирования фигур не устанавливаются с помощью свойств, применяемых непосредственно к объекту Shape или ShapeRange. Вместо этого связанные атрибуты фигур группируются во вспомогательных объектах, таких как объект FillFormat, который содержит все свойства, связанные с заливкой фигуры, или объект LinkFormat, который содержит все свойства, являющиеся уникальными для связанных объектов OLE.

Чтобы задать свойства для фигуры, необходимо сначала вернуть объект, представляющий набор соответствующих атрибутов фигуры, а затем задать свойства этого возвращенного объекта. Например, можно использовать свойство Fill, чтобы вернуть объект FillFormat, а затем задать свойство ForeColor объекта FillFormat, чтобы настроить цвет заливки переднего плана для указанной фигуры, как показано в следующем примере.

Применение свойства или метода к нескольким фигурам одновременно

В пользовательском интерфейсе можно выполнять некоторые операции с несколькими выбранными фигурами; Например, можно выбрать несколько фигур и задать все их отдельные заливки одновременно. Другие операции можно выполнять с выделенной только одной фигурой; Например, текст в фигуре можно изменить только в том случае, если выбрана одна фигура.

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

Если операция применяется для нескольких выделенных фигур в пользовательском интерфейсе, вы можете выполнить аналогичную операцию в Visual Basic, создав коллекцию ShapeRange, содержащую нужные фигуры, и применив соответствующие свойства и методы непосредственно к коллекции ShapeRange.

Если операция не применяется для нескольких выделенных фигур в пользовательском интерфейсе, вы по-прежнему можете выполнить операцию в Visual Basic, осуществив циклический просмотр коллекции Shapes или коллекции ShapeRange, содержащей нужные фигуры, и применив соответствующие свойства и методы к отдельным объектам Shape в коллекции.

Многие свойства и методы, применяемые к объекту Shape и коллекции ShapeRange, завершаются ошибкой, если применяются к определенным типам фигур. Например, применение свойства TextFrame к фигуре, которая не может содержать текст, приводит к ошибке.

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

Создание коллекции ShapeRange, содержащей все фигуры на листе

Можно создать объект ShapeRange , содержащий все объекты Shape на листе, выбрав фигуры, а затем используя свойство ShapeRange для возврата объекта ShapeRange , содержащего выбранные фигуры.

В Microsoft Excel аргумент Index не является необязательным для свойства Range коллекции Shapes , поэтому его нельзя использовать без аргумента для создания объекта ShapeRange , содержащего все фигуры в коллекции Shapes .

Применение свойства или метода к коллекции ShapeRange

Если вы можете выполнить в пользовательском интерфейсе операцию для нескольких выделенных фигур одновременно, можно выполнить аналогичное программное действие, создав коллекцию ShapeRange и затем применив к ней соответствующие свойства или методы. В следующем примере создается диапазон фигур, содержащий фигуры «Большая звезда» и «Маленькая звезда», и myDocument применяется к ним градиентная заливка.

Ниже приведены общие руководства по поведению свойств и методов при их применении к коллекции ShapeRange.

Применение метода к коллекции аналогично применению метода к каждому отдельному объекту Shape в этой коллекции.

Настройка значения свойства коллекции аналогична настройке значения свойства каждой отдельной фигуры в этом диапазоне.

Свойство коллекции, возвращающее константу, возвращает значение свойства для отдельной фигуры в коллекции, если все фигуры в коллекции имеют одинаковое значение для этого свойства. Если у фигур в коллекции разные значения свойства, возвращается «смешанная» константа.

Свойство коллекции, возвращающее простой тип данных (например, Long, Single или String), возвращает значение свойства для отдельной фигуры, если все фигуры в коллекции имеют одинаковое значение для этого свойства.

Значение некоторых свойств можно вернуть или установить только в том случае, если в коллекции содержится только одна фигура. Если коллекция содержит несколько фигур, возникает ошибка во время выполнения. Обычно это происходит в случае возвращения или настройки свойств, если аналогичные действия в пользовательском интерфейсе возможны только для одной фигуры (такие действия, как изменение текста в фигуре или изменение точек полилинии).

Предшествующие руководства также применяются при настройке свойств фигур, сгруппированных во вспомогательных объектах коллекции ShapeRange, например в объекте FillFormat. Если вспомогательный объект представляет операции, которые можно выполнять над несколькими выделенными объектами в пользовательском интерфейсе, можно вернуть объект из коллекции ShapeRange и настроить его свойства.

Например, вы можете использовать свойство Fill, чтобы вернуть объект FillFormat, представляющий заливки всех фигур в коллекции ShapeRange. Настройка свойств этого объекта FillFormat задает такие же свойства для всех отдельных фигур в коллекции ShapeRange.

Циклический просмотр коллекций Shapes или ShapeRange

Даже если вы не можете одновременно выполнить операцию с несколькими фигурами в пользовательском интерфейсе, выбрав их, а затем с помощью команды, можно выполнить эквивалентное действие программным способом, выполнив цикл по коллекции Shapes или ShapeRange , содержащей фигуры, с которыми вы хотите работать, применяя соответствующие свойства и методы к отдельным объектам Shape в коллекции.

В следующем примере выполняется цикл по всем фигурам myDocument и изменяется цвет переднего плана для каждой фигуры AutoShape.

В следующем примере создается коллекция ShapeRange , которая содержит все выбранные в данный момент фигуры в активном окне и задает цвет переднего плана для каждой выбранной фигуры.

Выравнивание, распределение и группирование фигур в ShapeRange

Методы Выравнивание и Распределение используются для размещения набора фигур относительно друг друга или относительно документа, в котором они содержатся.

Используйте метод Group или Метод Regroup , чтобы сформировать одну сгруппированную фигуру из набора фигур.

См. также

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

VBA Показать / Скрыть изображения или фигуры при нажатии кнопки «Событие» для сортировки данных

Я разрабатываю программу, которая имеет несколько столбцов данных, которые могут быть отсортированы по нескольким столбцам. Для эстетики я использую событие нажатия кнопок управления, чтобы переключать сортировку в порядке возрастания или убывания. Мой код довольно прост. Я использую изображения стрелок «вверх» и «вниз» как восходящие / нисходящие индикаторы. Все изображения находятся на рабочем листе, и в зависимости от метода сортировки событие щелчка показывает или скрывает соответствующее изображение. Кодирование работает правильно с одной проблемой, о которой я не задумывался. Когда пользователь нажимает кнопку для сортировки, эта стрелка отображается и правильно скрывается для этого столбца, однако в других столбцах по-прежнему отображается стрелка, которая может сбить пользователя с толку. Я хотел бы скрыть другие изображения / стрелки за исключением изображений / стрелок в столбце, который сортируется.

См. Прикрепленное изображение для уточнения

На фотографии выше, если снова нажать командную кнопку идентификатора игрока, стрелка вверх будет скрыта, и стрелка вниз будет видна, но остальные стрелки останутся такими же, как они. Я хотел бы, чтобы сортировался только столбец, чтобы показать стрелки.

Приведенный ниже код используется в модуле рабочей таблицы с использованием события нажатия кнопки.

Какие-либо предложения? Я искал ShapeRange, который является новым для меня и Shape Arrays, но еще не нашел то, что я ищу.

2 ответа

Я понял. Спасибо FaneDuru за помощь. Я использовал кодировку, предоставленную FaneDuru, но я разделил стрелки вверх и вниз, чтобы большинство из них оставалось сгруппированным, но мне пришлось по отдельности скрывать остальные. Например, в столбце «Идентификатор игрока». Для того, чтобы я мог переключать стрелки вверх и вниз, мне нужно было иметь как минимум две стрелки. В коде FaneDuru у меня осталась только 1 стрелка, так как остальные не были видны. Единственный способ понять это:

  • если бы стрелка вниз была видна до события щелчка, то я мог бы скрыть все стрелки вниз и все стрелки вверх, кроме стрелки в этом столбце. Когда происходит событие щелчка, стрелка вверх становится видимой, а стрелка вниз скрыта.
  • Это было больше работы, потому что я должен был поместить другие фигуры в массиве индивидуально

Сейчас это исправлено, но всегда есть место, где его можно улучшить. Код для модуля листа

Код для стандартного модуля

Попробуйте следующий подход, пожалуйста. Создайте Sub для вызова всеми кнопками Click события:

Затем используйте существующий код следующим образом:

Источник

Понравилась статья? Поделить с друзьями:
  • Vba excel скрыть пароль
  • Vba excel скрыть открытую книгу
  • Vba excel скрыть макросы
  • Vba excel скрыть колонку
  • Vba excel скрыть кнопку на листе