Объекты shape в excel

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


The Excel VBA Shape object represents an object in the
drawing layer, such as an AutoShape, freeform, OLE object, or picture. It is a
member of the Shapes collection, which contains all the shapes in a workbook,
but represents a single shape in a worksheet.

How to refer to the Shape
object

We refer to the Shapes collection in a given worksheet as indicated below:

ActiveSheet.Shapes                       

Then, we can use properties and methods of the Shapes collection as per the Excel object model structure. Some useful methods of the Shapes collection are: AddShape,
AddTextBox, AddFormControl, AddPicture, Item, SelectAll. See below an example
of the structure (for AddShape see next section).

 ActiveSheet.Shapes.SelectAll                    ‘selects all the shapes in
the active sheet

 ActiveSheet.Shapes.Item(1).Select           ‘selects the first shape in the
active sheet

The latest can simply be referred to as either of the below two
options: the first one using the index, and the second using the shape name. Thus, we refer to a single Shape object.

ActiveSheet.Shapes(1)

ActiveSheet.Shapes(«Rectangle 1»)

Add new shapes

We use the method AddShape of the Excel VBA Shapes
collection to create or add a new shape in a given worksheet. Excel
automatically gives a default name depending on the type of shape (for example,
Rectangle 1, TextBox 2, etc), but we can easily change the name of the shape
and many other properties (see later). See below the standard statement to add
a new AutoShape in the active worksheet. 

ActiveSheet.Shapes.AddShape MsoAutoShapeType, pLeft, pTop, pWidth, pHeight

Where MsoAutoShapeType specifies the type of
an AutoShape object (MsoAutoShapeType enumeration for Microsoft Office), and pLeft, pTop, pWidth, and pHeight determine the position and
size of the shape in points. Note that the pLeft and pTop refer to the upper
left corner of the shape in reference to the upper left edge of the worksheet.

In the following example, we add a rectangle
to the active worksheet.

 ActiveSheet.Shapes.AddShape
msoShapeRectangle, 20, 20, 200, 100

In order to add the shape to a specific cell
or range in the worksheet, we need to specify the position and size of the
shape as follows:

 Dim rng As Range

 Set rng = ActiveSheet.Range(«D4:H8»)

 rngLeft = rng.Left

 rngTop = rng.Top

 rngHeight = rng.Height

 rngWidth = rng.Width

 ActiveSheet.Shapes.AddShape msoShapeRectangle,
rngLeft, rngTop, rngWidth, rngHeight

It is more practical to add the shape to an
object variable in order to easily apply formatting properties or methods later.
In the following example, we define an object variable called “MyShape” to add
a rectangle to the active worksheet, then we change the name of the shape and
apply any other properties (for this see next section).

 Dim MyShape As Shape

 Set MyShape =
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 140, 80)

 With MyShape

     .Name =
«MyFirstShape»

     ‘other
properties

 End With

We can add other types of shapes such as text
boxes, form controls, smart art shapes, pictures, etc, with the corresponding
method of the Shapes collection. Here are some useful examples.

The code below adds a textbox into the active
worksheet with given dimensions (100×60) and some inner text. Note that we use
the TextFrame.Characters method to work with text inside the box.

 Dim
txtbox As Shape

 Set
txtbox = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 50, 50,
100, 60)

 With
txtbox.TextFrame.Characters

     .Text = «This is my first textbox»

     .Font.Color = vbRed

 End
With

We can add form controls such as buttons,
check boxes, combo boxes, etc, with the AddFormControl method of the Shapes
collection. For example, to add a command button we can use a similar structure
than the one we have seen earlier:

 ActiveSheet.Shapes.AddFormControl
xlButtonControl, 20, 20, 100, 40

In this particular case we
can also use the Buttons.Add method directly. The following subroutine adds a command button to the active worksheet,
and assigns another procedure (ButtonAction) to be run when clicked.

 Sub
AddButtonToWorksheet()

     Dim
btn As Object

     Set
btn = ActiveSheet.Buttons.Add(20, 20, 100, 40)

     btn.OnAction = «ButtonAction»

 End Sub

 Sub
ButtonAction()

     MsgBox «You have pressed the button»

 End Sub

Select, copy, and delete shapes

We can select, copy, or delete a shape using
the corresponding methods of the Shape object, and specifying that particular
shape with either the number or name (as we have seen earlier).  

 ActiveSheet.Shapes(«Rectangle 1»).Select        ‘selects Rectangle 1

 ActiveSheet.Shapes(2).Select                          ‘selects
the second shape

 ActiveSheet.Shapes.SelectAll                           ‘selects all shapes in the
active sheet

 ActiveSheet.Shapes(«Rectangle 1»).Copy

 ActiveSheet.Paste

 ActiveSheet.Shapes(«Rectangle
1»).Delete

In order to copy or delete all shapes in the
worksheet we need to loop through all shapes using a For Each loop. If you are
not familiar with loops, please check the lesson 6 (Conditions and Loops) in
the training for beginners. The following example deletes all shapes in the
active worksheet:

 Dim shp As Shape

 For Each shp In ActiveSheet.Shapes

     shp.Delete

 Next shp

If we want to select and work with a subset of shapes (more
than just one), we have to construct a ShapeRange
collection that contains the shapes we want to work with. In the example below,
we select a rectangular shape (Rectangle 1) and a textbox (TextBox 2) through
an array of shapes. We can now work with those shapes and apply for example
formatting properties to both at the same time.

 Dim ShpSubsetArray() As Variant

 Dim ShpSubset As Object

 ShpSubsetArray = Array(«Rectangle 1»,
«TextBox 2»)

 Set ShpSubset =
ActiveSheet.Shapes.Range(ShpSubsetArray)

 ShpSubset.Select

Format shapes

There are a bunch of properties to format
shapes in Excel VBA. We can specify the position in the worksheet with the Top
and Left properties as we have seen earlier. Similarly, we can set the width
and height of the shape with the respective properties of the Shape
object.

 With ActiveSheet.Shapes(«Rectangle 1»)

     .Top = 100

     .Left = 100

     .Width = 200

     .Height = 120

 End With

We can also change the aspect of the interior
and border of the shape. The following example changes the interior color of the
rectangle to blue and sets a thick red border around using the Fill and Line
properties.

 With ActiveSheet.Shapes(«Rectangle 1»)

     .Fill.ForeColor.RGB = RGB(0, 0, 255)

     .Line.ForeColor.RGB = RGB(255, 0, 0)

     .Line.Weight = xlThick

 End With

In order to add text to the shape we need to
use the TextFrame property. This may be particularly useful when dealing with
textboxes. We use the TextFrame.Characters method to add text, change font
properties, etc. The example below adds some text red and bold inside the
textbox.

 With ActiveSheet.Shapes(«TextBox 2»)

     With .TextFrame.Characters

         .Text = «This is my textbox»

         .Font.Color = vbRed

         .Font.Bold = True

     End With

 End With

Other VBA Objects

Application

Workbook

Worksheet

WorksheetFunction

Range

Chart

На чтение 18 мин. Просмотров 166 Опубликовано 07.02.2021

Класс Shape представляет объект в слое рисования, такой как AutoShape, произвольная форма, объект OLE или изображение.

Основными процедурами класса Shape являются копирование, удаление, выбор , ShapeRange.Delete, ShapeRange.Select, Shapes.Add3DModel, Shapes.AddCallout, Shapes.AddChart2, Shapes.AddConnector, Shapes.AddCurve, Shapes.AddFormControl, Shapes.AddLabel, Shapes.AddLicture, Shapesbject.AddOLE .AddPicture2, Shapes.AddPolyline, Shapes.AddShape, Shapes.AddSmartArt, Shapes.AddTextbox и Shapes.AddTextEffect

Содержание

  1. Set
  2. For Each
  3. Темы
  4. Методы
  5. Свойства

Set

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

  Dim strFilename As String: strFilename = Dim chr As Chart: Установите chr = Dim shpAdd3DModel As ShapeSet shpAdd3DModel = chr.Shapes.Add3DModel (Filename: =  strFilename)  

Для установки переменных типа Shape можно использовать следующие процедуры: GroupItems, ShapeRange.GroupItems, Comment.Shape, ConnectorFormat.BeginConnectedShape, ConnectorFo rmat.EndConnectedShape, FreeformBuilder.ConvertToShape, GroupShapes.Item, Hyperlink.Shape, PivotCache.CreatePivotChart, PivotTable.PivotChart, Duplicate, ParentGroup, ShapeRange.Item, ShapeRange.Group, ShapeRange.Item, ShapesRange.Group, ShapeRange.Group. Add3DModel, Shapes.AddCallout, Shapes.AddChart2, Shapes.AddConnector, Shapes.AddCurve, Shapes.AddFormControl, Shapes.AddLabel, Shapes.AddLine, Shapes.AddOLEObject, Shapes.AddPicture, Shapes.Add.Picture, Shapes.Add.Picture, Shapes.Add.Picture Shapes.AddSmartArt, Shapes.AddTextbox, Shapes.AddTextEffect, Slicer.Shape, Window.RangeFromPoint, ChartObject.ShapeRange, ChartObjects.ShapeRange, GroupShapes.Range, OLEObject.ShapeRange, ShapeRange.Range, ULEObject.ShapeRange, OLEObjects.Range.Under Shapes.Range, Chart.Shapes и Worksheet.Shapes

For Each

Вот пример обработки элементов Shape в коллекции.

  Dim shp As Shape: установите shp = Dim shpGroupItem как ShapeFor каждого shpGroupItem в shp.GroupItems Следующий shpGroupItem  

Темы

Некоторые процедуры в этом классе сгруппированы в темы и описаны на отдельных страницах тем

Ячейка с ее процедурами BottomRightCell и TopLeftCell
Копировать с ее процедурами Скопируйте и CopyPicture
3D с его процедурами Model3D и ShapeRange.Model3D
Sort/Order с его процедурами ZOrder, ZOrderPosition, ShapeRange.ZOrder и ShapeRange.ZOrderPosition
Добавьте с его процедурами Shapes. Add3DModel, Shapes.AddCallout, Shapes.AddChart2, Shapes.AddConnector, Shapes.AddCurve, Shapes.AddFormControl, Shapes.AddLabel, Shapes.AddLine, Shapes.AddOLEObject, Shapes.AddPicture, Shapes.Add.Picture, Shapes.Add.Picture, Shapes.Add.Picture, Shapes.Add.Picture Shapes.AddSmartArt, Shapes.AddTextbox и Shapes.AddTextEffect

Методы

Это основные методы класса Shape

Удалить – удаляет объект.

Select – выделяет объект.

ShapeRange.Delete – удаляет объект.

ShapeRange.Select – выбирает объект.

Другие методы

ShapeRange.Align – выравнивает фигуры в указанном диапазоне фигур.

  Set myDocument = Worksheets (1) myDocument.Shapes.SelectAll Selection.ShapeRange.Align msoAlignLefts, False  

ShapeRange.Distribute – горизонтальное или вертикальное распределение фигур в указанном диапазоне фигур.

  Установить myDocument = Worksheets (1) с помощью myDocument.Shapes numShapes = .Count Если numShapes>  1 Тогда numAutoShapes = 0 ReDim autoShpArray (1 в numShapes) Для i = 1 в numShapes If .Item (i) .Type = msoAutoShape Then numAutoShapes = numAutoShapes + 1 autoShpArray (numAutoShapes If) = .Item (numAutoShapes) If =.  numAutoShapes> 1 Затем ReDim Preserve autoShpArray (1 To numAutoShapes) Установить asRange = .Range (autoShpArray) asRange.Distribute msoDistributeHorizontally, False End If End If End With 

Shapes.BuildFreeform – строит объект произвольной формы. Возвращает объект FreeformBuilder, представляющий произвольную форму по мере ее создания.

  Set myDocument = Worksheets (1) With myDocument.Shapes.BuildFreeform (msoEditingCorner, 360, 200) .AddNodes  msoSegmentCurve, msoEditingCorner, _ 380, 230, 400, 250, 450, 300 .AddNodes msoSegmentCurve, msoEditingAuto, 480, 200 .AddNodes msoSegmentLine, msoEditingAuto, 480, 400 .AddNodes msoSegmentLine, msoEdCode, > 

Свойства

GroupShapes.Count возвращает значение типа Long, представляющее количество объектов в коллекции.

GroupShapes.Parent возвращает родительский объект для указанного объекта. Только для чтения.

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

   Установить myDocument = Worksheets (1) myDocument.Shapes.Range (Array (1, 3)) _ .Fill.Patterned msoPatternHorizontalBrick  

Adjustments возвращает объект Adjustments, который содержит значения корректировки для всех корректировок в указанной форме. Применяется к любому объекту Shape, который представляет AutoShape, WordArt или Connector.

  Установить myDocument = Worksheets (1) myDocument.Shapes (1) .Adjustments (1) = 0.25  

AlternativeText возвращает или задает описательную (альтернативную) текстовую строку для объекта Shape при сохранении объекта на веб-странице.

  Worksheets (1) .Shapes (1) .AlternativeText = "Концентрические круги"  

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

  Set myDocument = Worksheets (1) For  Каждый s В myDocument.Shapes Если s.AutoShapeType = msoShape16pointStar То s. AutoShapeType = msoShape32pointStar End If Next  

BackgroundStyle возвращает или устанавливает стиль фона.

BlackWhiteMode возвращает или задает значение, которое указывает, как указанная форма отображается при просмотре презентации в черно-белом режиме.

  Sub UseBlackWhiteMode () Dim wksOne  Как набор рабочих листов wksOne = Application.Worksheets (1) wksOne.Shapes (1) .BlackWhiteMode = msoBlackWhiteGrayOutline End Sub  

Callout возвращает объект CalloutFormat который содержит свойства форматирования выноски для указанной формы. Применяется к объекту Shape, который представляет выносные линии.

  Установить myDocument = Worksheets (1) с помощью myDocument.Shapes .AddShape msoShapeOval, 180, 200, 280, 130 с .AddCallout (  msoCalloutTwo, 420, 170, 170, 40) .TextFrame.Characters.Text = "Мой овал" с .Callout .Accent = True .Border = False End With End With End With  

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

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

ConnectionSiteCount возвращает количество сайтов подключения в указанной фигуре.

  Установить myDocument = Worksheets (1) Установить s = myDocument.Shapes Установить firstRect = s.AddShape (msoShapeRectangle, _ 100, 50, 200, 100) Установить secondRect = s.AddShape (msoShapeRectangle, _ 300,  300, 200, 100) lastsite = secondRect.ConnectionSiteCount с s.AddConnector (msoConnectorCurve, _ 0, 0, 100, 100) .ConnectorFormat .BeginConnect ConnectedShape: = firstRect, _ ConnectionSite: = 1 .EndConnect ConnectedShape: = secondRect  : = 1 Заканчивается на s.AddConnector (msoConnectorCurve, _ 0, 0, 100, 100) .ConnectorFormat .BeginConnect ConnectedShape: = firstRect, _ ConnectionSite: = 1 .EndConnect ConnectedShape: = secondRect, _ ConnectionSite: = lastsite End With  

Connector true, если указанная фигура является соединителем.

  Установить myDocument = Worksheets (  1) С myDocument.Sh  обезьяны For i = .Count To 1 Step -1 With .Item (i) If .Connector Then .Delete End With Next End With  

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

  Set myDocument = Worksheets (1) Set s = myDocument.Shapes Set firstRect = s.AddShape (msoShapeRectangle, 100, 50, 200  , 100) Установите secondRect = s.AddShape (msoShapeRectangle, 300, 300, 200, 100) Установите c = s.AddConnector (msoConnectorCurve, 0, 0, 0, 0) с помощью c.ConnectorFormat .BeginConnect firstRect, 1 .EndConnect secondRect,  1 c.RerouteConnections .BeginDisconnect. EndDisconnect End With  

ControlFormat возвращает объект ControlFormat, содержащий свойства элемента управления Microsoft Excel.

  Set lbcf = Worksheets (1) .Shapes (2) .ControlFormat lbcf.RemoveItem lbcf.ListIndex  

Contemporary устанавливает или возвращает декоративный флаг для указанного объекта.

Fill возвращает объект FillFormat для указанной формы или объект ChartFillFormat для указанной диаграммы, который содержит свойства форматирования заливки для фигуры или диаграммы .

  Установить myDocument = Worksheets (1) с помощью myDocument.Shapes.AddShape (msoShapeRectangle, _ 90, 90, 90, 50) .Fill .ForeColor.RGB = RGB (128  , 0, 0) .BackColor.RGB = RGB (170, 170, 170) .TwoColorGradient msoGradientHorizontal, 1 End With  

FormControlType возвращает Тип элемента управления Microsoft Excel.

  For Each s In Worksheets (1) .Shapes If s.Type = msoFormControl Then If s.FormControlType = xlCheckBox Then _ sC  ontrolFormat.Value = False End If Next  

Glow возвращает объект GlowFormat для указанной фигуры, который содержит свойства форматирования свечения для фигуры.

GraphicStyle возвращает или задает константу MsoGraphicStyleIndex, которая представляет стиль графики SVG.

  Dim myShape As Shape  Set myShape = ActiveDocument.Shapes (1) myShape.GraphicStyle = msoGraphicStylePreset22  

GroupItems возвращает объект GroupShapes, представляющий отдельные фигуры в указанной группе . Используйте метод Item объекта GroupShapes, чтобы вернуть одну фигуру из группы. Применяется к объектам Shape, которые представляют сгруппированные фигуры.

  Установить myDocument = Worksheets (1) с myDocument.Shapes .AddShape (msoShapeIsoscelesTriangle, _ 10, 10, 100, 100) .Name  = "shpOne" .AddShape (msoShapeIsoscelesTriangle, _ 150, 10, 100, 100) .Name = "shpTwo" .AddShape (msoShapeIsoscelesTriangle, _ 300, 10, 100, 100) .Name = "shpThree" With .Range (Array (  "shpOne", "shpTwo", "shpThree")). Group .Fill.PresetTextured msoTextureBlueTissuePaper .GroupItems (2) .Fill.PresetTextured msoTextureGreenMarble, заканчивающийся на  

HasChart возвращает, содержит ли фигура диаграмму.

HasSmartArt возвращает, присутствует ли диаграмма SmartArt в указанной фигуре.

Высота возвращает или задает значение Single, представляющее высоту объекта в точках.

HorizontalFlip true, если указанная фигура перевернута вокруг горизонтальной оси.

  Установить myDocument = Worksheets (1) For Each s In m  yDocument.Shapes Если s.HorizontalFlip Then s.Flip msoFlipHorizontal If s.VerticalFlip Then s.Flip msoFlipVertical Next  

Hyperlink возвращает объект Hyperlink, который представляет гиперссылку для фигуры.

  Рабочие листы (1) .Фигуры (1) .Гиперссылка. Follow NewWindow: = True  

ID возвращает значение типа Long, представляющее тип для указанного объекта.

Left возвращает или задает значение Single, представляющее расстояние в пунктах от левого края объекта до левого края столбца A (на листе) или левого края диаграммы. область (на диаграмме).

Line возвращает объект LineFormat, который содержит свойства форматирования линии для указанной фигуры. (Для линии объект LineFormat представляет саму линию; для фигуры с рамкой объект LineFormat представляет границу).

  Установите myDocument = Worksheets (1) с  myDocument.Shapes.AddLine (10, 10, 250, 250) .Line .DashStyle = msoLineDashDotDot .ForeColor.RGB = RGB (50, 0, 128) Заканчивается на  

LinkFormat возвращает объект LinkFormat, содержащий свойства связанного объекта OLE.

  For Each s In Worksheets (1) .Shapes If s.Type = msoLinkedOLEObject Then  s.LinkFormat.Update Next  

LockAspectRatio true, если указанная форма сохраняет свои исходные пропорции при изменении ее размера. Значение false, если вы можете изменять высоту и ширину фигуры независимо друг от друга при изменении ее размера.

  Установите myDocument = Worksheets (1) myDocument.Shapes.AddShape (msoShapeCube,  _ 50, 50, 100, 200) .LockAspectRatio = msoTrue  

Locked возвращает или задает логическое значение, указывающее, заблокирован ли объект.

Name возвращает или задает строковое значение, представляющее имя объекта.

Узлы возвращает коллекцию ShapeNodes, представляющую геометрическое описание указанной формы.

  Set myDocument = Worksheets (1) With myDocument.Shapes (3) .Nodes .Insert 4, msoSegmentCurve  , msoEditingSmooth, 210, 100 Заканчивается на  

OLEFormat возвращает объект OLEFormat, содержащий свойства объекта OLE.

  Worksheets(1).Shapes(1).OLEFormat.Activate 

OnAction возвращает или задает имя макроса, который запускать, когда указанный объект – cho sen.

  Рабочие листы (1) .Shapes (1) .OnAction = "ShapeClick"  

Родитель возвращает родительский объект для указанного объекта. Только для чтения.

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

  Sub ParentGroup () Dim pgShape As Shape With ActiveSheet.Shapes .AddShape Type: = 1, Left: = 10, Top: = 10, _ Width: = 100, Height: = 100 .AddShape Type  : = 2, Left: = 110, Top: = 120, _ Width: = 100, Height: = 100 .Range (Array (1, 2)). Group End With 'Используя дочернюю фигуру в группе, получите родительскую фигуру  .  Установите pgShape = ActiveSheet.Shapes (1) .GroupItems (1) .ParentGroup MsgBox «Две формы теперь будут удалены».  'Удалить родительскую фигуру.  pgShape. Удалить конечную подпрограмму  

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

  Установите myDocument = Worksheets (1) с помощью myDocument.Shapes (1) .PictureFormat .Brightness = 0.3 .Contrast =.  75 End With  

Placement возвращает или устанавливает значение XlPlacement, которое представляет способ прикрепления объекта к ячейкам под ним.

Reflection возвращает объект ReflectionFormat для указанной формы, который содержит свойства форматирования отражения для этой фигуры.

Rotation возвращает или задает поворот фигуры в градусах.

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

ShapeStyle возвращает или задает значение MsoShapeStyleIndex, которое представляет стиль формы диапазона фигур.

SmartArt возвращает объект, представляющий SmartArt, связанный с фигурой.

SoftEdge возвращает S oftEdgeFormat для указанной фигуры, который содержит свойства форматирования мягких краев для фигуры.

TextEffect возвращает объект TextEffectFormat, который содержит свойства форматирования текстового эффекта для указанной фигуры .

  Установить myDocument = Worksheets (1) с помощью myDocument.Shapes (3) Если .Type = msoTextEffect, то .TextEffect.FontBold = True End If End With  

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

  Рабочие листы (  1) .Shapes (1) .TextFrame _ .HorizontalAlignment = xlHAlignJustify  

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

ThreeD возвращает объект ThreeDFormat, содержащий свойства форматирования 3D-эффекта для указанной фигуры.

  Установить  myDocument = Worksheets (1) С myDocument.Shapes (1) .ThreeD .Visible = True .Depth = 50 .Extrus  ionColor.RGB = RGB (255, 100, 255) 'Значение RGB для пурпурного .SetExtrusionDirection msoExtrusionTop .PresetLightingDirection = msoLightingLeft End With  

Title возвращает или задает заголовок альтернативного текста, связанного с указанной формой.

Top возвращает или задает значение Single, которое представляет расстояние в пунктах от верха край самой верхней фигуры в диапазоне фигур до верхнего края листа.

Type возвращает или задает значение MsoShapeType, представляющее тип фигуры.

VerticalFlip true, если указанная фигура перевернута вокруг вертикальной оси.

  Установить myDocument = Worksheets (1)  Для каждого s в myDocument.Shapes Если s.HorizontalFlip Then s.Flip msoFlipHorizontal If s.VerticalFlip Then s. Flip msoFlipVertical Next  

Vertices возвращает координаты вершин указанного рисунка произвольной формы (и контрольных точек для кривых Безье) в виде серии пар координат. Вы можете использовать массив, возвращаемый этим свойством, в качестве аргумента метода AddCurve или AddPolyLine.

  Установите myDocument = Worksheets (1) с помощью myDocument.Shapes (1) vertArray =  .Vertices x1 = vertArray (1, 1) y1 = vertArray (1, 2) MsgBox "Координаты первой вершины:" & x1 & "," & y1 End With  

Visible возвращает или задает значение MsoTriState, которое определяет, является ли объект видимым.

Width возвращает или задает значение Single, представляющее ширина объекта в точках.

ShapeRange.Adjustments возвращает объект Adjustments, который содержит значения корректировки для всех корректировок в указанной форме. Применяется к любому объекту ShapeRange, представляющему AutoShape, WordArt или Connector.

ShapeRange.AlternativeText возвращает или задает описательную (альтернативную) текстовую строку для объекта ShapeRange когда объект сохраняется на веб-страницу.

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

  Установить myDocument = Worksheets (1) для каждого s в myDocument.Shapes Если s.AutoShapeType = msoShape16pointStar Тогда s.AutoShapeType = msoShape32pointStar  End If Next  

ShapeRange.BackgroundStyle возвращает или устанавливает стиль фона.

ShapeRange .BlackWhiteMode возвращает или задает значение, которое указывает, как указанная форма отображается при просмотре презентации в черно-белом режиме.

  Sub UseBlackWhiteMode () Dim  wksOne как набор рабочих листов wksOne = Application  .Worksheets (1) wksOne.Shapes (1) .BlackWhiteMode = msoBlackWhiteGrayOutline End Sub  

ShapeRange.Callout возвращает объект CalloutFormat, содержащий форматирование выноски свойства для указанной формы. Применяется к объектам ShapeRange, которые представляют обозначения линий.

  Set myDocument = Worksheets (1) With myDocument.Shapes .AddShape msoShapeOval, 180, 200, 280, 130 With .AddCallout (msoCalloutTwo  , 420, 170, 170, 40) .TextFrame.Characters.Text = "Мой овал" с .Callout .Accent = True .Border = False End With End With End With  

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

ShapeRange.Child возвращает msoTrue, если указанная фигура является дочерней фигурой или если все фигуры в диапазоне фигур являются дочерними фигурами одного и того же родителя. Возвращает msoFalse, если выбранная фигура не является дочерней фигурой. Возвращает msoTriStateMixed, если только некоторые из выбранных фигур являются дочерними..

  Sub FillChildShape () 'Выберите первую фигуру на холсте для рисования.  ActiveSheet.Shapes (1) .CanvasItems (1) .Select 'Заполнить выбранную фигуру, если это дочерняя фигура.  Если Selection.ShapeRange.Child = msoTrue Then Selection.ShapeRange.Fill.ForeColor.RGB = RGB (100, 0, 200) Else MsgBox «Эта фигура не является дочерней фигурой».  End If End Sub  

ShapeRange.ConnectionSiteCount возвращает количество сайтов подключения в указанной фигуре.

  Установить myDocument = Worksheets (1) Установить s = myDocument.Shapes Установить firstRect = s.AddShape (msoShapeRectangle, _ 100, 50, 200, 100) Установить secondRect = s.AddShape (msoShapeRectangle, _ 300, 300, 200  , 100) lastsite = secondRect.ConnectionSiteCount с s.AddConnector (msoConnectorCurve, _ 0, 0, 100, 100) .ConnectorFormat .BeginConnect ConnectedShape: = firstRect, _ ConnectionSite: = 1 .EndConnect ConnectedShape: = secondRect, _  Завершить с помощью s.AddConnector (msoConnectorCurve, _ 0, 0, 100, 100) .ConnectorFormat .BeginConnect ConnectedShape: = firstRect, _ ConnectionSite: = 1 .EndConnect ConnectedShape: = secondRect, _ ConnectionSite: = lastsite End With   

ShapeRange.Connector true, если указанная фигура является соединителем.

  Установить myDocument = Worksheets (1  ) С myDocument.Shapes For i = .Count To 1 Step -1  With .Item (i) Если .Connector Then .Delete End With Next End With  

ShapeRange.ConnectorFormat возвращает объект ConnectorFormat, содержащий форматирование соединителя свойства. Применяется к объектам ShapeRange, которые представляют соединители.

  Set myDocument = Worksheets (1) Set s = myDocument.Shapes Set firstRect = s.AddShape (msoShapeRectangle, 100, 50, 200,  100) Установите secondRect = s.AddShape (msoShapeRectangle, 300, 300, 200, 100) Установите c = s.AddConnector (msoConnectorCurve, 0, 0, 0, 0) с помощью c.ConnectorFormat .BeginConnect firstRect, 1 .EndConnect secondRect, 1  c.RerouteConnections .BeginDisconnect .EndDisconnect End With  

ShapeRange.Count возвращает значение типа Long, представляющее количество объектов в коллекции.

ShapeRange.Decorative устанавливает или возвращает декоративный флаг для указанного объекта.

ShapeRange.Fill возвращает объект FillFormat для указанной фигуры или объект ChartFillFormat для указанной диаграммы, который содержит свойства форматирования заливки для фигуры или диаграммы.

  Установить myDocument = Worksheets (1) с  myDocument.Shapes.AddShape (msoShapeRectangle, _ 90, 90, 90  , 50) .Fill .ForeColor.RGB = RGB (128, 0, 0) .BackColor.RGB = RGB (170, 170, 170) .TwoColorGradient msoGradientHorizontal, 1 заканчивается на  

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

ShapeRange. GraphicStyle возвращает или задает константу MsoGraphicStyleIndex, которая представляет стиль диапазона фигур, содержащего одну или несколько графиков SVG.

ShapeRange.GroupItems возвращает GroupShapes объект, представляющий отдельные фигуры в указанной группе. Используйте метод Item объекта GroupShapes, чтобы вернуть одну фигуру из группы. Применяется к объектам ShapeRange, представляющим сгруппированные фигуры.

  Set myDocument = Worksheets (1) With myDocument.Shapes .AddShape (msoShapeIsoscelesTriangle, _ 10, 10, 100, 100) .Name  = "shpOne" .AddShape (msoShapeIsoscelesTriangle, _ 150, 10, 100, 100) .Name = "shpTwo" .AddShape (msoShapeIsoscelesTriangle, _ 300, 10, 100, 100) .Name = "shpThree" With .Range (Array (  "shpOne", "shpTwo", "shpThree")). Group .Fill.PresetTextured msoTextureBlueTissuePaper .GroupItems (2) .Fill.PresetTextured msoTextureGreenMarble, заканчивающийся на  

ShapeRange.HasChart возвращает, содержит ли диапазон фигур диаграмму.

ShapeRange.Height возвращает или задает значение Single, представляющее высоту, в пунктах объекта.

ShapeRange.HorizontalFlip true, если указанная фигура перевернута вокруг горизонтальной оси.

  Установить myDocument = Worksheets (1) для каждого s в myDocument.Shapes Если s.HorizontalFlip То s.Flip msoFlipHorizonta  l Если s.VerticalFlip Then s.Flip msoFlipVertical Next  

ShapeRange.ID возвращает значение Long, представляющее тип для указанного объекта.

ShapeRange.Left возвращает или задает значение Single, которое представляет расстояние в пунктах от левого края объекта до левого края столбца A (на лист) или левый край области диаграммы (на диаграмме).

ShapeRange.Line возвращает объект LineFormat, который содержит свойства форматирования линии для указанного форма. (Для линии объект LineFormat представляет саму линию; для фигуры с рамкой объект LineFormat представляет границу).

  Установите myDocument = Worksheets (1) с  myDocument.Shapes.AddLine (10, 10, 250, 250) .Line .DashStyle = msoLineDashDotDot .ForeColor.RGB = RGB (50, 0, 128) Заканчивается на  

ShapeRange.LockAspectRatio true, если указанная форма сохраняет свои исходные пропорции при изменении ее размера. Значение false, если вы можете изменять высоту и ширину фигуры независимо друг от друга при изменении ее размера.

  Установите myDocument = Worksheets (1) myDocument.Shapes.AddShape (msoShapeCube,  _ 50, 50, 100, 200) .LockAspectRatio = msoTrue  

ShapeRange.Name возвращает или задает значение String, представляющее имя объекта .

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

   Установите myDocument = Worksheets (1) с помощью myDocument.Shapes (3) .Nodes. Insert 4, msoSegmentCurve, msoEditingSmooth, 210, 100 End With  

ShapeRange.Parent возвращает родительский объект для указанного объекта. Только для чтения.

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

  Sub ParentGroup () Dim pgShape As Shape With ActiveSheet.Shapes. AddShape Тип: = 1, Слева: = 10, Сверху: = 10, _ Ширина: = 100, Высота: = 100.  AddShape Type: = 2, Left: = 110, Top: = 120, _ Width: = 100, Height: = 100 .Range (Array (1, 2)). Group End With 'Используя дочернюю фигуру в группе, получите  Родительская форма.  Установите pgShape = ActiveSheet.Shapes (1) .GroupItems (1) .ParentGroup MsgBox «Две формы теперь будут удалены».  'Удалить родительскую фигуру.  pgShape.Delete End Sub  

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

  Установить myDocument = Worksheets (1) с помощью myDocument.Shapes (1) .PictureFormat .Brightness = 0.3 .Contrast =.  75 Завершить на  

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

ShapeRange.Rotation возвращает или задает поворот фигуры в градусах.

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

ShapeRange.ShapeStyle возвращает или задает значение MsoShapeStyleIndex, представляющее стиль формы диапазона фигур.

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

ShapeRange.TextEffect возвращает Te xtEffectFormat, который содержит свойства форматирования текстового эффекта для указанной фигуры.

  Установить myDocument = Worksheets (1) With myDocument.Shapes (3) If .Type = msoTextEffect Then .TextEffect  .FontBold = True End If End If End With  

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

Worksheets(1).Shapes(1).TextFrame _ .HorizontalAlignment = xlHAlignJustify  

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

ShapeRange.ThreeD возвращает объект ThreeDFormat, содержащий свойства форматирования 3D-эффекта для указанной формы.

  Установить myDocument = Worksheets (1) с помощью myDocument.Shapes (1) .ThreeD .Visible = True .Depth = 50 .ExtrusionColor.RGB = RGB (  255, 100, 255) 'Значение RGB для пурпурного .SetExtrusionDirection msoExtrusionTop. PresetLightingDirection = msoLightingLeft End With  

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

ShapeRange.Top возвращает или задает значение Single, представляющее расстояние в точках от верхнего края самой верхней фигуры в диапазоне фигур до верхнего края листа. .

ShapeRange.Type возвращает значение MsoShapeType, представляющее тип фигуры.

ShapeRange.VerticalFlip true, если указанная фигура перевернута вокруг вертикальной оси.

  Установить myDocument = Worksheets (1) For Each s In myDocument.Shapes If s.HorizontalFlip Then s.  Flip msoFlipHorizontal If s.VerticalFlip Then s.Flip msoFlipVertical Next  

ShapeRange.Vertices возвращает координаты вершин указанного рисунка произвольной формы (и контрольных точек для кривых Безье) в виде серии координатных пар. Вы можете использовать массив, возвращаемый этим свойством, в качестве аргумента метода AddCurve или AddPolyLine.

  Установите myDocument = Worksheets (1) с помощью myDocument.Shapes (1) vertArray =  .Vertices x1 = vertArray (1, 1) y1 = vertArray (1, 2) MsgBox "Координаты первой вершины:" & x1 & "," & y1 End With  

ShapeRange.Visible возвращает или задает значение MsoTriState, определяющее, является ли объект видимым.

ShapeRange.Width возвращает или устанавливает значение Single значение, представляющее ширину объекта в пунктах.

Shapes.Count возвращает значение типа Long, представляющее количество объектов в коллекции.

Shapes.Parent возвращает родительский объект для указанного объекта. Только для чтения.

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

   Dim arShapes () As Variant Dim objRange As Object arShapes = Array ("Oval 4", "Rectangle 5") Set objRange = ActiveSheet.Shapes.Range (arShapes)  

VBA Coding With Shape Objects

In this comprehensive guide, you will be learning all the ways you can create and manipulate shapes with VBA macros.

Shapes are objects you can insert into your spreadsheet through the Insert Tab via the Shapes gallery button. These objects can add visualizations to your dashboards, store text, or even serve as buttons to launch macro code.

Here is an outline of the topics covered in this guide:

Creating A New Shape With AddShape()

To create a shape object in Excel using VBA, you must call the AddShape function.

The AddShape function has 4 required inputs in order to generate a new shape:

  • Type — Name of the type of shape you wish to generate

  • Left — Where on the spreadsheet the left side of the shape should be located

  • Top — Where on the spreadsheet the top of the shape should be located

  • Width — How wide your shape should be

  • Height — How tall your shape should be

Here is a snippet of VBA code showing how to create 2 shapes and store the newly created shape to a variable for easy reference later on in your code.

Sub CreateShape()

Dim shp1 As Shape
Dim shp2 As Shape

‘Create & Store New Shape to Variable
  Set shp1 = ActiveSheet.Shapes.AddShape(msoShape16pointStar, _
    ActiveCell.Left, ActiveCell.Top, 80, 27)

‘Create & Store New Shape to Variable (use Enum Code)
  Set shp2 = ActiveSheet.Shapes.AddShape(94, _
    ActiveCell.Left, ActiveCell.Top, 80, 27)

End Sub

Continue reading through the next few sections to learn how to determine the type, size, and position values you should be using to create your desired shape.

Choosing A Shape Type

There are a TON of shape types available to you through VBA. There are so many in fact, that I have painstakenly gone through and visually cataloged them for your ease in the below slide show.

Once you have determined which shape you would like to create, grab either the shape textual name or the enumeration number. You will use this MSOAutoShapeType reference to code the exact shape you want.

If you have a shape already created on your spreadsheet, you can use the following code to figure out its enumeration code that you can reference in your VBA code.

Sub DetermineShapeType()
‘PURPOSE: Display The Shape Type of Selected Shape
‘SOURCE: www.TheSpreadsheetGuru.com

Dim ActiveShape As Shape
Dim UserSelection As Variant

‘Pull-in what is selected on screen
  Set UserSelection = ActiveWindow.Selection

‘Determine if selection is a shape
  On Error GoTo NoShapeSelected
    Set ActiveShape = ActiveSheet.Shapes(UserSelection.Name)
  On Error Resume Next

  ‘Tell User the Shape Type Enumeration Number
  MsgBox «The Select Shape Type = » & ActiveShape.AutoShapeType

Exit Sub

‘Error Handler
NoShapeSelected:
  MsgBox «You do not have a shape selected!»

  End Sub

Determining Shape Position

There are two properties you can modify to change the location of a shape on the spreadsheet with VBA. These two properties are the Left and Top values of the shape.

If you are unsure what the size of your shape should be, there are two popular ways you can size your shape:

Method 1: You can base it on the left and top positions of a cell on your spreadsheet.

The following VBA code shows you how to use the Left value of Cell B1 and the Top value of Cell B10 to reposition the rectangle shape that is created.

Sub ShapePositionFromCell()

Dim shp As Shape

‘Create Shape
  Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
    Range(«B1»).Left, Range(«B10»).Top, 100, 50)

End Sub

Method 2: You can position the shape to your liking manually on the spreadsheet and read the left and top positions using VBA.

The following VBA code will output a message box that displays the Left and Top positions of a currently selected shape (ActiveShape).

Sub DetermineShapePosition()
‘PURPOSE: Display Selected Shape’s Position
‘SOURCE: www.TheSpreadsheetGuru.com

Dim ActiveShape As Shape
Dim UserSelection As Variant

‘Pull-in what is selected on screen
  Set UserSelection = ActiveWindow.Selection

‘Determine if selection is a shape
  On Error GoTo NoShapeSelected
    Set ActiveShape = ActiveSheet.Shapes(UserSelection.Name)
  On Error Resume Next

  ‘Tell User the Shape Position Values
  MsgBox «Left Position = » & ActiveShape.Left & vbNewLine & _
    «Top Position = » & ActiveShape.Top

Exit Sub

‘Error Handler
NoShapeSelected:
  MsgBox «You do not have a shape selected!»

  End Sub

Determining Shape Size

There are two properties you can modify to change the size of a shape with VBA. These two properties are the Width and Height values of the shape.

If you are unsure what the size of your shape should be, there are two popular ways you can size your shape:

Method 1: You can base it on the size of a range of cells

Sub ShapeSizeFromRange()

Dim shp As Shape
Dim rng As Range

‘Provide Range for Shape Size
  Set rng = Range(«A1:C4»)

‘Create Shape
  Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
    ActiveCell.Left, ActiveCell.Top, rng.Width, rng.Height)

End Sub

Method 2: You can create the shape to your liking manually and read the width and height using VBA

Sub DetermineShapeSize()
‘PURPOSE: Display Selected Shape’s Size
‘SOURCE: www.TheSpreadsheetGuru.com

Dim ActiveShape As Shape
Dim UserSelection As Variant

‘Pull-in what is selected on screen
  Set UserSelection = ActiveWindow.Selection

‘Determine if selection is a shape
  On Error GoTo NoShapeSelected
    Set ActiveShape = ActiveSheet.Shapes(UserSelection.Name)
  On Error Resume Next

  ‘Tell User the Shape Position Values
  MsgBox «Width = » & ActiveShape.Width & vbNewLine & _
    «Height = » & ActiveShape.Height

Exit Sub

‘Error Handler
NoShapeSelected:
  MsgBox «You do not have a shape selected!»

  End Sub

Text Formatting

Sub CreateShapeWithText()

Dim shp As Shape

‘Create & Store New Shape to Variable
  Set shp = ActiveSheet.Shapes.AddShape(msoShape16pointStar, _
    ActiveCell.Left, ActiveCell.Top, 80, 27)

   ‘Add Text To Shape
  shp.TextFrame2.TextRange.Text = «My Awesome Shape!»

‘Bold/Italicize/Underline Text
  shp.TextFrame2.TextRange.Font.Bold = True
  shp.TextFrame2.TextRange.Font.Italic = True
  shp.TextFrame2.TextRange.Font.UnderlineStyle = msoUnderlineDottedLine

  ‘Change Text Color
  shp.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(225, 140, 71)

‘Change Text Size
  shp.TextFrame2.TextRange.Font.Size = 14

‘Center Align Text
  shp.TextFrame.HorizontalAlignment = xlHAlignCenter
  shp.TextFrame.VerticalAlignment = xlVAlignCenter

End Sub

Fill Color & Borders

Sub CreateShapeWithBorder()

Dim shp As Shape

‘Create & Store New Shape to Variable
  Set shp = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, _
    ActiveCell.Left, ActiveCell.Top, 80, 27)

‘Light Orange Fill
  shp.Fill.ForeColor.RGB = RGB(253, 234, 218)

‘Add Dotted Border
  shp.Line.DashStyle = msoLineDashDotDot

‘Dark Orange Border
  shp.Line.ForeColor.RGB = RGB(252, 213, 181)

‘Adjust Border Thickness
  shp.Line.Weight = 2

‘Remove Border
  shp.Line.Visible = False

End Sub

Change Shape Type

If you are looking to change the shape type of an existing type, you can do so by setting the AutoShapeType to a different shape type value.

Sub ChangeShapeType()

Dim shp As Shape

‘Store specific shape on spreadsheet to a variable
  Set shp = ActiveSheet.Shapes(«Shape1»)

‘Change shape type to oval
  shp.AutoShapeType = msoShapeOval

End Sub

Create Your Own Macro Button With VBA Code

I personally cannot stand the native Excel form control button. It looks so outdated and really makes your spreadsheets look unprofessional. That is why I prefer to use VBA code to create a shape that looks like a button.

I thought this would be a great example to show you a real-world coding example where I need to create and format a shape to have a specific appearance. The following VBA macro code puts everything we have covered in this guide together and provides you with some sample code that comprises of a true shape-building solution.

Sub Create_Button()
‘PURPOSE: Creates a SpreadsheetGuru macro button shape
‘SOURCE: www.TheSpreadsheetGuru.com

Dim bttn As Shape

‘Create & Position Macro Button
  Set bttn = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, _
    ActiveCell.Left, ActiveCell.Top, 80, 27)

‘Modify Text Formatting
  With bttn.TextFrame2.TextRange
    .Text = «Macro»
    .Font.Bold = msoTrue
    .Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
    .Font.Size = 14
  End With

‘Center Alignment
  bttn.TextFrame.HorizontalAlignment = xlHAlignCenter
  bttn.TextFrame.VerticalAlignment = xlVAlignCenter

‘Light Gray Fill
  bttn.Fill.ForeColor.RGB = RGB(217, 217, 217)

‘No Border
  bttn.Line.Visible = msoFalse

End Sub

Loop Through All Shapes Of Specific Type

If you need to target a specific shape type on your spreadsheet, you can create a loop that tests the AutoShapeType value to filter your results.

The following VBA code example loops through all shape objects in the currently selected spreadsheet and only changes the fill color of the rectangle shapes.

Sub ChangeRectangleShapes()

Dim shp As Shape

‘Loop through each shape on ActiveSheet
  For Each shp In ActiveSheet.Shapes

      ‘Only modify rectangle shapes
      If shp.AutoShapeType = msoShapeRectangle Then
        shp.Fill.ForeColor.RGB = RGB(253, 234, 218)
      End If

        Next shp

End Sub

I Hope This Microsoft Excel Article Helped!

Hopefully, I was able to explain how you use VBA code to create and format shapes on your Excel spreadsheets. If you have any questions about these techniques or suggestions on how to improve them, please let me know in the comments section below.

About The Author

Hey there! I’m Chris and I run TheSpreadsheetGuru website in my spare time. By day, I’m actually a finance professional who relies on Microsoft Excel quite heavily in the corporate world. I love taking the things I learn in the “real world” and sharing them with everyone here on this site so that you too can become a spreadsheet guru at your company.

Through my years in the corporate world, I’ve been able to pick up on opportunities to make working with Excel better and have built a variety of Excel add-ins, from inserting tickmark symbols to automating copy/pasting from Excel to PowerPoint. If you’d like to keep up to date with the latest Excel news and directly get emailed the most meaningful Excel tips I’ve learned over the years, you can sign up for my free newsletters. I hope I was able to provide you with some value today and I hope to see you back here soon!

— Chris

2006 г.

Chart, ChartObject, Shape, Picture

  • Как добавить Chart в отдельный лист книги? Как внедрить Chart в лист книги?
  • Как указать источник данных объекту Chart?
  • Как получить доступ к ряду (Series) Chart?
  • Как добавить новый ряд (Series) в Chart?
  • Как изменить цвет серии в Chart?
  • Как изменять заголовки Chart и его осей?
  • Как назначить подписи значениям оси Х (ось категорий) из области ячеек?
  • Как убрать легенду из Chart?
  • Как добавить в лист объект Shape и записать в него текст?
  • Как изменить цвет линии и фона Shape?
  • Как сгруппировать несколько объектов Shape на листе?
  • Как вставить в лист картинку?
  • Как изменить размер картинки и вписать ее в размер определенной области ячеек?
  • Как изменить яркость или контрастность картинки?
  • Как добавить картинке гиперссылку?
  • Полезные ссылки

Пожалуй, самым популярным использованием Excel является применение его для построения диаграмм (Chart). Это заметно по большому количеству примеров, статей и различных FAQ в Интернете по этой теме.

Chart Object

ChartObject Object Model

Shapes Collection Object Model

Chart Class

Как добавить Chart в отдельный лист книги? Как внедрить Chart в лист книги?

Chart может существовать как отдельный лист книги, так и как внедренный в лист объект ChartObject. Принципиальная разница только в том, ChartObject — это уже объект Shape, содержащий в себе Chart.

Чтобы добавить Chart как отдельный лист книги, нужно воспользоваться методом Add коллекции Sheets.

var 
  oChart: _Chart;
  oSheet: _Worksheet;
...
  oChart := XL.Sheets.Add(EmptyParam, oSheet, 1, xlChart, lcid) as _Chart;

Внимание! Не пытайтесь добавить Chart, используя коллекцию Charts — вы получите OLE исключение, т.к. Charts — это коллекция-подмножество Sheets, содержащее ссылки на листы Chart.

Чтоб добавить Chart, как внедренный в лист объект, можно воспользоваться методом Add коллекции листа ChartObjects (здесь существует возможность сразу задать координаты и размеры внедряемого Chart, как будто это объект Shape).

        oChart := (oSheet.ChartObjects(EmptyParam, lcid)
        as ChartObjects).Add(
        oSheet.Range['B9', EmptyParam].Left,
        oSheet.Range['B9', EmptyParam].Top + 8,
        oSheet.Range['I9', EmptyParam].Left - oSheet.Range['B9', EmptyParam].Left,
        oSheet.Range['B30', EmptyParam].Top - oSheet.Range['B9', EmptyParam].Top).Chart
        as _Chart;

Внимание! При преобразовании Chart в ChartObject (или наоборот) лист Chart (или объект ChartObject) исчезнет (будет утерян), поэтому необходимо всегда получать ссылку на новый объект Chart, возвращаемый функцией Locate.

Charts

Location Method

How to: Add Chart Controls to Worksheets

Как указать источник данных объекту Chart?

Для указания источника данных, можно воспользоваться методом SetSourceData объекта Chart или (мне кажется, что это даже удобнее) методом ChartWizard.

var oRng: ExcelRange;
...
    oRng := oSheet.Range['E2:H6', EmptyParam];

    // Указываем источник данных методом SetSourceData
    with oChart do begin
      SetSourceData(oRng, xlColumns); // источник данных и PlotBy

      ChartType := xl3dColumn; // тип диаграммы
    end;


    // Указываем источник методом ChartWizard, в котором можно сразу
    // задать многие параметры диаграммы
    oChart.ChartWizard(
      oRng, // Source: OleVariant;
      xl3dColumn, // Gallery: OleVariant;

      EmptyParam, // Format: OleVariant;
      // данные серий - в колонках
      xlColumns, // PlotBy: OleVariant;
      EmptyParam, // CategoryLabels: OleVariant;
      EmptyParam, // SeriesLabels: OleVariant;

      True, // HasLegend: OleVariant;
      'Sales', // Title: OleVariant;
      EmptyParam, // CategoryTitle: OleVariant;
      'у.е.', // ValueTitle: OleVariant;

      EmptyParam, // ExtraTitle: OleVariant;
      lcid);

SetSourceData Method

ChartWizard Method

Как получить доступ к ряду (series) Chart?

Например, в цикле присвоим всем сериям новое имя.

    for i := 1 to (oChart.SeriesCollection(EmptyParam, lcid) as SeriesCollection).Count do
      (oChart.SeriesCollection(i, lcid) as Series).Name := Format('="Q%d"', [i]);

Обратиться к серии (ряду) можно не только по индексу, но и по имени, например

(oChart.SeriesCollection('Q1', lcid) as Series).Interior.Color := RGB(0, 0, 255);

SeriesCollection Collection Object

Series Object

Как добавить новый ряд (Series) в Chart?

    with (oChart.SeriesCollection(EmptyParam, lcid) as SeriesCollection).NewSeries do

    begin
      Values := oSheet.Range['H2', 'H6'];
      Name := '="Q4"';
    end;

Также можно воспользоваться методом Extend, который «расширяет» область данных диаграммы.

NewSeries Method

Extend Method

Как изменить цвет серии в Chart?

    with (oChart.SeriesCollection(1, lcid) as Series).Interior do begin

      Color := RGB(0, 0, 255);
      Pattern := xlSolid;
    end;

Interior Property

Border Property

Fill Property

Как изменять заголовки Chart и его осей?

Например, так:

      // Заголовок диаграммы
      HasTitle[lcid] := True;
      ChartTitle[lcid].Characters[EmptyParam, EmptyParam].Text := 'Sales';

      // Ось Х - заголовка нет
      (Axes(xlCategory, xlPrimary, lcid) as Axis).HasTitle := False;

      // Оси Y - заголовок "у.е."

      (Axes(xlValue, xlPrimary, lcid) as Axis).HasTitle := True;
      (Axes(xlValue, xlPrimary, lcid) as Axis).AxisTitle.
        Characters[EmptyParam, EmptyParam].Text := 'у.е.';
      (Axes(xlValue, xlPrimary, lcid) as Axis).AxisTitle.Orientation := xlUpward;

Axes Method

Как назначить подписи значениям оси Х (ось категорий) из области ячеек?

Для отображения подписей оси X предназначено свойство XValues объекта Series.

    // значения по категориям
    (oChart.SeriesCollection(1, lcid) as Series).XValues :=
      oSheet.Range['C2:C6', EmptyParam];

XValues Property

Как убрать легенду из Chart?

Легенду можно просто «спрятать», указав, что ее «нет». Также вы можете изменять любые атрибуты легенды (Font, Interior и другие), получив доступ к свойству Legend объекта Chart.

oChart.HasLegend[lcid] := False;

Legend Object

HasLegend

Как добавить в лист объект Shape и записать в него текст?

Объект Shape — это контейнер для многих других объектов, таких как TextBox, PolyLine, ChartObject и др. Также и свойство Comment объекта Range, по возможностям и набору свойств, можно отнести к Shape. Все объекты-наследники Shape содержатся в коллекции Shapes листа.

Внимание! Не забудьте явно указать namespace при присвоении типа объекта Shape, т.к. возможен конфликт с объектом Shape namespace Office:

var

  AShape: ExcelXP.Shape;
// или
  AShape: Excel2000.Shape;

Примеры:

    // Rectangle
    AShape := ASheet.Shapes.AddShape(
      msoShapeRectangle,
      ASheet.Range['A1', EmptyParam].Width / 2,
      ASheet.Range['A1', EmptyParam].Height,
      ASheet.Range['D1', EmptyParam].Left - ASheet.Range['A1', EmptyParam].Width / 2,
      ASheet.Range['D9', EmptyParam].Top - ASheet.Range['A1', EmptyParam].Height
    );
    AShape.TextFrame.Characters(EmptyParam, EmptyParam).Text := 'Rectangle';

    // Oval

    AShape := ASheet.Shapes.AddShape(
      msoShapeOval,
      ASheet.Range['E1', EmptyParam].Left,
      ASheet.Range['F2', EmptyParam].Top,
      ASheet.Range['I1', EmptyParam].Left - ASheet.Range['E1', EmptyParam].Left,
      ASheet.Range['F12', EmptyParam].Top - ASheet.Range['F2', EmptyParam].Top
    );
    AShape.TextFrame.Characters(EmptyParam, EmptyParam).Text := 'Oval';
    AShape.TextFrame.HorizontalAlignment := xlCenter;
    AShape.TextFrame.VerticalAlignment := xlCenter;

    // TextBox

    AShape := ASheet.Shapes.AddShape(
      msoTextOrientationVerticalFarEast,
      ASheet.Range['B1', EmptyParam].Left,
      ASheet.Range['B11', EmptyParam].Top,
      ASheet.Range['E1', EmptyParam].Left - ASheet.Range['B1', EmptyParam].Left,
      ASheet.Range['B18', EmptyParam].Top - ASheet.Range['B10', EmptyParam].Top
    );
    AShape.TextFrame.Characters(EmptyParam, EmptyParam).Text := 'Rhombus';
    AShape.TextFrame.HorizontalAlignment := xlCenter;
    AShape.TextFrame.VerticalAlignment := xlCenter;

    // Hedgehog

    AShape := ASheet.Shapes.AddShape(
      msoShape32pointStar,
      ASheet.Range['D1', EmptyParam].Left,
      ASheet.Range['E19', EmptyParam].Top,
      ASheet.Range['G1', EmptyParam].Left - ASheet.Range['D1', EmptyParam].Left,
      ASheet.Range['E30', EmptyParam].Top - ASheet.Range['E19', EmptyParam].Top
    );
    AShape.TextFrame.Characters(EmptyParam, EmptyParam).Text := 'Hedgehog';
    AShape.TextFrame.HorizontalAlignment := xlCenter;
    AShape.TextFrame.VerticalAlignment := xlCenter;
    AShape.TextFrame.Orientation := msoTextOrientationUpward; // 2

Shapes Collection

Shapes

Shape Object

TextFrame Property

ShapeRange Collection

Как изменить цвет линии и фона Shape?

Delphi:

    (AShape.Fill as FillFormat).ForeColor.SchemeColor := 41;
    (AShape.Line as LineFormat).ForeColor.SchemeColor := 62;

C#:

    AShape.Fill.ForeColor.SchemeColor = 43;
    AShape.Line.ForeColor.SchemeColor = 53;

Fill Property

Line Property

Как сгруппировать несколько объектов Shape на листе?

    // Сгруппируем все объекты Shapes на листе

    AShape := (ASheet.DrawingObjects(EmptyParam, lcid)
      as DrawingObjects).ShapeRange.Group;
    AShape.Name := 'MyGroup1';

    // группировка через вариантный массив
    V := VarArrayCreate([1, 2], varVariant); // !!!

    // сгруппируем 2-й и 4-й Shape
    V[1] := 2;
    V[2] := 4;
    AShape := ASheet.Shapes.Range[V].Group;
    AShape.Name := 'MyGroup2';

    // Если заранее известно, какие Shape будут сгруппированы,

    // то можно и так
    AShape := ASheet.Shapes.Range[VarArrayOf([2, 4])].Group;
    AShape.Name := 'MyGroup3';

    // Теперь, на закуску, через Selection
    // Выберем 2-й, 3-й и 4-й Shape
    ASheet.Shapes.Item(2).Select(True);
    ASheet.Shapes.Item(3).Select(False);
    ASheet.Shapes.Item(4).Select(False);
    // сгруппируем выделенные Shape

    AShape := (XL.Selection[lcid] as DrawingObjects).ShapeRange.Group;
    AShape.Name := 'MyGroup4';

    // Разгруппировать
    AShape.Ungroup;

Заметьте, что после того, как объекты Shape были сгруппированы, их количество на листе (Shapes.Count) уменьшится. После «группировки» можно обратиться к отдельному Shape, включенному в группу, используя коллекцию GroupItems объекта Shape, полученного в результате группировки.

Group Method

Regroup Method

Ungroup Method

GroupItems Property

Как вставить в лист картинку?

var
  AShape: Excel_TLB.Shape;
  APic: Picture; // Excel_TLB

  Img: TImage; // ExtCtrls
  MyFormat: Word; // для копирования картинки в БО
  AData: THandle; // для копирования картинки в БО
  APalette: HPALETTE; // для копирования картинки в БО
...
    // Первый метод

    // Вставляем картинку из файла с "нулевым" размером в
    // позицию ячейки B2. "Нулевой" размер потому, что
    // мы не знаем заранее размера картинки
    with ASheet.Range['B2', EmptyParam] do

      AShape := ASheet.Shapes.AddPicture(ExpandFileName('common.gif'),
        msoFalse, msoTrue, Left, Top, 0, 0);
    // После вставки получаем ссылку на объект Shape, содержащий
    // нашу картинку. "Реанимируем" оригинальный размер картинки
    AShape.ScaleHeight(1, msoTrue, EmptyParam);
    AShape.ScaleWidth(1, msoTrue, EmptyParam);
    AShape.Name := 'Picture1';

    // Второй метод - вставляем в выделенную ячейку

    ASheet.Range['C7', EmptyParam].Select;

    APic := (ASheet.Pictures(EmptyParam, lcid) 
      as Pictures).Insert(ExpandFileName('common.gif'), EmptyParam);
    APic.Name := 'Picture2';

    // Третий метод - вставка через буфер обмена
    // Загрузим картинку с диска в TImage
    Img.Picture.LoadFromFile(ExpandFileName('common.bmp'));
    MyFormat := CF_PICTURE;
    AData := Img.Picture.Bitmap.Handle;
    APalette := Img.Picture.Bitmap.Palette;
    // и помещаем в буфер обмена

    Img.Picture.SaveToClipboardFormat(MyFormat, AData, APalette);
    Clipboard.SetAsHandle(MyFormat, AData);
    // из буфера обмена вставим в ячейку D12
    ASheet.Paste(ASheet.Range['D12', EmptyParam], EmptyParam, lcid);

Все добавленные картинки будут включены в коллекцию Shapes листа.

AddPicture Method

Worksheet.Pictures Method

Paste Method

Как изменить размер картинки и вписать ее в размер определенной области ячеек?

Если пытаться изменять размер картинки, то она, по умолчанию, будет менять размер пропорционально. Такую особенность задает свойство LockAspectRatio объекта Shape. Если установить LockAspectRatio равным msoFalse, то картинка будет менять размеры непропорционально.

// Картинка будет вписана в область D12:J18 с сохранением пропорций
    AShape.Width := ASheet.Range['K12', EmptyParam].Left -
      ASheet.Range['D12', EmptyParam].Left;
    AShape.Height := ASheet.Range['D19', EmptyParam].Top -
      ASheet.Range['D12', EmptyParam].Top;


// Картинка будет вписана во всю область D12:J18 без сохранения пропорций
    AShape.LockAspectRatio := msoFalse;
    AShape.Width := ASheet.Range['K12', EmptyParam].Left -
      ASheet.Range['D12', EmptyParam].Left;
    AShape.Height := ASheet.Range['D19', EmptyParam].Top -
      ASheet.Range['D12', EmptyParam].Top;

LockAspectRatio Property

Как изменить яркость или контрастность картинки?

    (AShape.PictureFormat as PictureFormat).Brightness := 0.25; // 25% яркости
    (AShape.PictureFormat as PictureFormat).Contrast := 0.75; // 75% контрастность

PictureFormat Property

Как добавить картинке гиперссылку?

Смотрите » Как добавить URL? Как сделать гиперссылку для рисунка?»

Hyperlink Property

Полезные ссылки

Creating Charts in Excel 2003 Using Visual Basic for Applications Code

How To Create Excel Chart w/OLE Automation from Visual Basic

Microsoft Excel Charting FAQs

Excel Charts and Graphs Help from Mr Excel

Excel Chart Tips

How to automate Microsoft Excel from Microsoft Visual C# .NET

How To Automate Excel from an HTML Web Page Using JScript

VBA Samples for Working with Excel 2003 Worksheets

XL97: How to Create a GIF File from a Microsoft Excel Chart

COM Tips & Tricks

Like this post? Please share to your friends:
  • Объекты excel объектов vba
  • Объекты word страница документ
  • Объекты excel в автокад
  • Объекты word art что это такое
  • Объекты excel в vba это