Размер фигуры в excel

 

RAD

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

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

#1

20.12.2012 02:24:47

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

Прикрепленные файлы

  • post_386517.xls (35.5 КБ)

Цитата: MickMick от 26.03.2008, 16:29
Можно ли сделать так, чтобы размеры прямоугольника изменялись сразу после ввода числа в ячейку?

Добавь в модуль листа (ПКМ по ярлычку листа -> Исходный текст) следующий код:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Application.Run "КнигаШпецаДокапыча!UprPryam_SHpetsStyle"
End Sub

Цитата: MickMick от 26.03.2008, 16:29
Возможно ли, чтобы заливкой прямоугольника был или цвет, или рисунок из файла?

Добавь ещё одну строчку, перед строкой Select Case …:

If Range("C2").Value Like "*.jpg" Then s.Fill.UserPicture Range("C2").Value Else s.Fill.Solid
Теперь указав в ячейке C2 полный путь к картинке в виде, например, «C:mylovefas.jpg» (без кавычек, jpg — строчными буквами), получаем требуемый результат.

MickMick, ты правильно решил управлять фигурами

Excel

посредством значений ячеек — это много удобнее, чем подгонять настройки мышкой. Дам тебе пару советов:

Совет №1:
Кроме способов заливки у автофигур есть множество других полезных свойств. Чтобы понять, как их запросто воткнуть в свой код, сделай следующее: включи макрорекордер, поменяй у фигуры какой-нибудь формат, выдели яч.»<любую>«, поменяй формат обратно, жми Alt+F11 и сравни два одинаковых столбика свойств: там, где значение менялось — и будет твоим параметром, которым ты потом можешь оперировать.

Совет №2:
Чтобы увидеть сразу все свойства и параметры свой автофигуры сделаем так:

Sub OkoSHpetsStyle()
   Set SH = ActiveSheet.Shapes("Прямоуг. 1")
End Sub

Не торопись его запускать на выполнение, он у нас для другого:

  • вставляем этот код в обычный модуль VBA;
  • отображаем окно View -> Locals Window;
  • три раза жмём F8 (курсор ввода должен находиться внутри кода);
  • в окне Locals появился плюсик рядом с SH, разворачиваем и видим ВСЁ, чем можно управлять с помощью VBA.

Резюмируя вышесказанное, делаем вывод, что, овладев нехитрыми приёмами программного (вместо мышиного) управления форматом автофигур, мы имеем возможность легко вертеть ими как вздумается. Один прямоугольничек, потом два. Человеку всегда хочется большего.

PS: Если для тебя имеет место точность размеров фигур на печати или ради любопытства – измерь линейкой что напечаталось и сравни с указанными размерами в Excel :)

И на десерт, в приложенном файле, пример на

схеме Аксёнова

. Технология та же: макрoс по моей таблице значений строит вышеназванный бланк, состоящий почти из ПОЛУТЫСЯЧИ автофигур  :o

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

Надстройка для Excel, позволяющая добавлять на лист заранее созданные автофигуры, и проставлять для них размеры (с выносными линиями).

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

Размеры выделенной фигуры (или её части) вводятся в поля на панели инструментов

При нажатии клавиши Enter к выделенной фигуре добавляется размерная линия (с выносками), возле которой указывается заданный размер (в миллиметрах)

Надстройка корректно работает только в Excel 2003

Для использования в Excel 2007 и 2010 требуется доработка кода
(поскольку автофигуры в версии Excel 2007 и выше по-умолчанию имеют несколько другие свойства, и результат при использовании макроса для Excel 2003 получается далёк от идеала)

Работа с фигурами в 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. Копирование, перемещение и поворот фигур.


Как автоматически изменить размер формы на основе / в зависимости от указанного значения ячейки в Excel?

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

Автоматическое изменение размера формы на основе указанного значения ячейки с кодом VBA


Автоматическое изменение размера формы на основе указанного значения ячейки с кодом VBA

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

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

2. в Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код VBA в окно кода.

Код VBA: автоматическое изменение размера формы на основе указанного значения ячейки в Excel

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Row = 2 And Target.Column = 1 Then
        Call SizeCircle("Oval 2", Val(Target.Value))
    End If
End Sub
Sub SizeCircle(Name As String, Diameter)
    Dim xCenterX As Single
    Dim xCenterY As Single
    Dim xCircle As Shape
    Dim xDiameter As Single
    On Error GoTo ExitSub
    xDiameter = Diameter
    If xDiameter > 10 Then xDiameter = 10
    If xDiameter < 1 Then xDiameter = 1
    Set xCircle = ActiveSheet.Shapes(Name)
    With xCircle
        xCenterX = .Left + (.Width / 2)
        xCenterY = .Top + (.Height / 2)
        .Width = Application.CentimetersToPoints(xDiameter)
        .Height = Application.CentimetersToPoints(xDiameter)
        .Left = xCenterX - (.Width / 2)
        .Top = xCenterY - (.Height / 2)
    End With
ExitSub:
End Sub

Внимание: В коде «Овал 2»- это имя формы, размер которой вы измените. И Ряд = 2, Столбец = 1 означает, что размер формы «Овал 2» будет изменен на значение в A2. Пожалуйста, измените их по своему усмотрению.

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

Код VBA: автоматическое изменение размера нескольких фигур на основе значения разных указанных ячеек в Excel

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xAddress As String
    On Error Resume Next
    If Target.CountLarge = 1 Then
        xAddress = Target.Address(0, 0)
        If xAddress = "A1" Then
            Call SizeCircle("Oval 1", Val(Target.Value))
        ElseIf xAddress = "A2" Then
            Call SizeCircle("Smiley Face 3", Val(Target.Value))
        ElseIf xAddress = "A3" Then
            Call SizeCircle("Heart 2", Val(Target.Value))
        End If
    End If
End Sub

Sub SizeCircle(Name As String, Diameter)
    Dim xCenterX As Single
    Dim xCenterY As Single
    Dim xCircle As Shape
    Dim xDiameter As Single
    On Error GoTo ExitSub
    xDiameter = Diameter
    If xDiameter > 10 Then xDiameter = 10
    If xDiameter < 1 Then xDiameter = 1
    Set xCircle = ActiveSheet.Shapes(Name)
    With xCircle
        xCenterX = .Left + (.Width / 2)
        xCenterY = .Top + (.Height / 2)
        .Width = Application.CentimetersToPoints(xDiameter)
        .Height = Application.CentimetersToPoints(xDiameter)
        .Left = xCenterX - (.Width / 2)
        .Top = xCenterY - (.Height / 2)
    End With
ExitSub:
End Sub

Ноты:

1) В коде «Овал 1«,»Смайлик 3(Основной ключ) и Сердце 3»- это названия фигур, вы автоматически измените их размеры. И A1, A2 иA3 — это ячейки, значения которых вы будете автоматически изменять размер фигур.

2) Если вы хотите добавить больше фигур, добавьте линии «ElseIf xAddress = «A3» Тогда» а также «Call SizeCircle (» Heart 2 «, Val (Target.Value))«выше первого»End If«в коде. И измените адрес ячейки и имя формы в соответствии с вашими потребностями.

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

С этого момента, когда вы меняете значение в ячейке A2, размер овала 2 формы будет изменен автоматически. Смотрите скриншот:

Или измените значения в ячейках A1, A2 и A3, чтобы автоматически изменить размеры соответствующих форм «Овал 1», «Смайлик 3» и «Сердце 3». Смотрите скриншот:

Внимание: Размер фигуры больше не будет изменяться, если значение ячейки больше 10.



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

  • Как добавить указатель мыши к определенной форме в 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% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Понравилась статья? Поделить с друзьями:
  • Размер файла который можно создать в текстовом редакторе word определяется
  • Размер шрифта горячие клавиши excel
  • Размер страницы для печати в word
  • Размер файла в макросе excel
  • Размер шрифта в условное форматирование excel