Remkomplekty.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Excel vba chart

11.9 Работа с диаграммами: объект Chart

Объект Excel.Chart, программная работа с диаграммами средствами VBA, выбор типа диаграммы, добавление рядов

Одно из основных применений Excel — это анализ данных. А для анализа данных часто удобно использовать диаграммы с их специальными возможностями, такими, как тренды. На практике задачи по автоматизации создания множества похожих друг на друга диаграмм (обычно на основе информации, полученной из базы данных) возникают очень часто.

С диаграммами в Excel существует некоторая терминологическая путаница. То, что на графическом интерфейсе русского Excel называется диаграммой (меню Вставка -> Диаграмма), по английски называется графиком (Chart) и ему соответствует объект Chart. В объектной модели Excel предусмотрен также и объект Diagram, но он представляет скорее схему отношений (то, что при помощи графического интерфейса русского Excel можно добавить при помощи меню Вставка -> Схематическая диаграмма). Под диаграммой в этом разделе будет пониматься то же, что и у создателей русского Excel — график.

Диаграммы в Excel создаются при помощи объекта Chart.

Лучше всего вначале этот объект объявить:

Dim oChart As Chart

Дальше можно создавать диаграмму. Производится создание диаграммы при помощи много раз использованного нами приема — вызова метода Add() коллекции Charts:

Set oChart = ActiveWorkbook.Charts.Add(, ActiveSheet)

В принципе, диаграмма уже создана, но, поскольку никакие ее свойства не определены, она выглядит просто как пустой лист. Чтобы она обрела содержание, необходимо выполнить еще несколько действий:

Первое (и единственное обязательное действие) — определить источник данных для диаграммы, для чего предназначен метод SetSourceData(). В качестве источника может выступать только объект Range (он передается в качестве первого и единственного обязательного параметра этого метода). Второй параметр (необязательный) определяет, в каком порядке считывать данные — сначала по столбцам или сначала по строкам. Например, в нашем случае это может выглядеть так:

В принципе, если запустить созданный код на выполнение, то диаграмма уже будет создана. Для всех остальных параметров будут приняты значения по умолчанию. Однако на практике нужно определить еще хотя бы тип диаграммы (по умолчанию она будет выглядеть как «обычная гистограмма», то есть ряд из столбиков разной длины). Для этой цели используется свойство ChartType, для которой разработчиками предусмотрено целых 73 значения. Например, чтобы преобразовать диаграмму в обычный график, можно использовать код вида:

Еще одна очень распространенная задача – добавить дополнительные ряды на диаграмму. Для этой цели необходимо создать и получить ссылку на объект Series – ряд, а потом для ряда определить свойство Values (ему передается в качестве значения объект Range):

Dim oSeries As Series

Set oSeries = oChart.SeriesCollection.NewSeries

Пользователи часто говорят, что им необходимо создавать диаграммы не на отдельном листе, а на том же листе, на котором расположены данные. По умолчанию диаграмма создается в оперативной памяти и помещается на отдельный лист. Если нам необходимо поместить ее на уже существующий лист, то в этом случае ее вначале надо создать на отдельном листе, а затем переместить при помощи метода Location. Отдельный лист, созданный для диаграммы, при этом автоматически исчезнет:

oChart.Location xlLocationAsObject, «Лист1»

Обратите внимание, что метод Location принимает в качестве первого параметра одну из констант (xlLocationAsNewSheet – переместить на специально создаваемый новый лист, xlLocationAsObject – переместить на объект, то есть лист), а в качестве второго – не объект листа, как можно было бы подумать, а обязательно его имя. Если код предполагается использовать и в русской, и в английской версии Excel, то предпочтительнее получить имя листа программным образом.

Большая неприятность, связанная с методом Location, заключается в том, что после перемещения диаграммы внутрь листа объектная ссылка на эту диаграмму теряется, и надо находить объект этой диаграммы заново. При попытке повторного обращения к объекту Chart выдается сообщение «Automation Error». Лучше всего поэтому вызов метода Location помещать в самый конец кода, посвященного диаграмме. В противном случае нам придется разыскивать созданную нами диаграмму и заново получать на нее объектную ссылку, например так:

Dim oSeries As Series

Set oSeries = Worksheets(1).ChartObjects(1).Chart.SeriesCollection.NewSeries

Так работать, конечно, намного менее удобно.

Остальные многочисленные параметры диаграммы настраиваются при помощи свойств и методов объектов Chart:

  • свойство ChartArea — это свойство возвращает одноименный объект ChartArea, который представляет собой область, занимаемую диаграммой и используется для настройки внешнего вида диаграммы (свойства Font, Interior и т.п.). Если необходимо настроить внешний вид не всей диаграммы, а той ее части, которая используется непосредственно для вывода графика, используется схожее свойство PlotArea. По умолчанию диаграмма размещается прямо по центру листа. Если необходимо ее переместить в точно определенное место листа, используются знакомые на свойства Top, Height, Left и Width для объекта ChartArea.
  • свойство ChartTitle возвращает одноименный объект, при помощи которого можно настроить заголовок диаграммы (с такими свойствами, как Text, Font, Border и т.п.);
  • ChartType — важнейшее свойство, про которое мы уже говорили. Определяет тип диаграммы;
  • HasDataTable — если установить это свойство в True, то в нижней части диаграммы (по умолчанию) появится таблица с числами, на основе которых была создана диаграмма. Одновременно будет создан программный объект DataTable, при помощи которого можно настроить представление этой таблицы. Схожим образом действуют свойства HasLegend, HasPivotFields и HasTitle.
  • Name — это свойство позволяет настроить имя диаграммы (как название вкладки в Excel). По умолчанию диаграммы называются последовательно «Диаграмма1», «Диаграмма2» и т.п.
  • SizeWithWindow — если поставить значение этого свойства в True (по умолчанию False), то размер диаграммы будет подогнан таким образом, чтобы точно соответствовать размеру листа.
  • Tab — свойство, о котором мало кто подозревает. Оно позволяет настроить при помощи одноименного объекта внешний вид вкладки в книге Excel для диаграммы (или просто листа). Например, чтобы пометить вкладку зеленым, можно воспользоваться кодом

oChart.Tab.Color = RGB(0, 255, 0)

  • Visible — возможность спрятать диаграмму без ее удаления.

Остальные свойства в основном относятся к настройке отображения трехмерных диаграмм и к защите диаграммы от изменения пользователем.

Теперь — о самых главных методах объекта Chart:

  • метод Activate() используется очень часто. Он позволяет сделать диаграмму активной (то есть просто перейти на нее);
  • метод ApplyCustomType() позволяет поместить создать диаграмму своего собственно пользовательского типа (для этого необходимо вначале создать шаблон для этого типа и поместить его в галерею);
  • метод ApplyDataLabels() позволяет поместить на диаграмму метки для размещенных на ней данных. Этот метод принимает множество параметров, которые позволяют настроить отображение данных меток (показывать или не показывать значения и т.п.);
  • метод Axes() возвращает объект, представляющий оси диаграммы. Затем этот объект можно использовать для настройки данных осей;
  • ChartWizard() — этот метод позволяет быстро переформатировать диаграмму, как будто бы прошли на графическом экране при помощи мастера построения диаграмм и передали ему значения. Позволяет при помощи одной строки кода добиться того, что другими способами потребовало бы минимум несколько строк;
  • Copy() — позволяет скопировать диаграмму в другое место книги (например, чтобы создать новую диаграмму, использовав в качестве основы существующую). Для переноса существующей диаграммы в другое место можно воспользоваться методами Location() или Move().
  • CopyPicture() — замечательный метод, который позволяет поместить диаграмму в буфер обмена как изображение. Затем это изображение можно вставить, например, в документ Word или в любое другое место. Другой вариант — воспользоваться методом Export(), который позволяет создать рисунок, представляющий диаграмму, в виде файла на диске.
  • Delete() — просто удаляет диаграмму;
  • Evaluate() — как обычно, этот метод позволяет найти нужную диаграмму в книге по ее имени;
  • PrintOut() — возможность отправить диаграмму на печать. Этот метод принимает множество параметров, которые позволяют настроить такой вывод;
  • Refresh() — возможность обновить диаграмму, если изменились данные, на основе которых она строилась;
  • Select() — возможность выделить диаграмму (равносильно щелчку по ней мышью). Deselect() — снятие выделения (равносильно нажатию на );
  • SetBackgroundPicture() — возможность «подложить» под диаграмму фоновый рисунок. Конечно, он должен быть не очень ярким;
  • SetSourceData() — важнейший метод, который позволяет определить данные, на основе которых строится диаграмма. Про него мы уже говорили.
Читать еще:  Как обвести ячейки в excel

Для объекта Chart предусмотрено также события «на все случаи жизни» — реакция на щелчки мышью, на выделение/снятие выделения, активизацию, пересчет данных, изменение размера и т.п., однако используются такие события на практике нечасто.

Excle VBA — Chart Sheets

In this section, you’ll learn how to manipulate charts with VBA.

There are two types of chart you can manipulate with VBA code. The first is a chart sheet, and the second is an embedded chart. A chart sheet is a separate sheet in your workbook, with its own tab that you click on at the bottom of Excel. An embedded chart is one that is inserted onto a worksheet. The two types of chart, sheet and embedded, use slightly different code. We’ll concentrate on embedded charts. But just to get a flavour of how to create chart sheets with VBA, start a new spreadsheet. Enter some data in cells A1 to B11. Something like the following:

Click Developer > Visual Basic to get at the coding windows. Create a new Sub in Sheet 1. Call it ChartSheetExample. Add the following line:

Dim ChartSheet1 As Chart

Your code should look like this:

So instead of an Integer variable type or a string variable type, we now have a Chart type. The name we’ve given this Chart variable is ChartSheet1.

To add a chart sheet, all you need is the call to the Add method. However, we’ll set up our ChartSheet1 variable as an object, so that we can access the various chart properties and methods. Add the following line to your code:

Set ChartSheet1 = Charts.Add

Now add a With End With statement:

The first thing we can do is to add the data for the chart. To do that, you need the SetSourceData method. This method takes a parameter called Source. The Source parameter needs a range of cells to grab data from. Here’s the code to add:

After Source:= we have this:

This gets a reference to a Sheet called «Sheet1». The Range of cells we want is cells B1 to B11. Your coding window should now look like this:

You can run your code at this stage. Press F5 on your keyboard, or click Run > Run Sub/User Form from the menus at the top of the VBA window. You should find that a new Chart sheet opens up in Excel:

Notice that Excel has automatically added a column chart. You can specify what kind of chart you need, however, by using the ChartType property. For the type of column chart Excel has added, you need the enumeration xlColumnClustered:

.SetSourceData Source:=Sheets(«Sheet1»).Range(«B1:B11»)
.ChartType = xlColumnClustered

There are lots of other values (constants) you can add for the ChartType in place of xlColumnClustered. Click the link below to see a reference page of all the ChartType constants:

The values we added in the A column of the spreadsheet have been used for the X Axis (Category Axis) of the chart sheet, and the scores themselves as the Y Axis (Values Axis). The same text has been used for the chart title and the series legend — «Exam score». You can change all this.

To set a chart title at the top, your first need to switch on the HasTitle property:

You can then set the Text property of the ChartTitle property. Like this:

.ChartTitle.Text = «Chart Sheet Example»

Obviously, between the quotes marks for the Text property, you can add anything you like. This will then be used at the top of the chart.

To set some text below the X and Y Axes, you need the Axes method. After a pair of round brackets, you need two things: a Type and an Axis Group. The Type can be one of the following: xlValue, xlCategory, or xlSeriesAxis (used for 3D charts). The Axis Group can be either xlPrimary or xlSecondary. Add the following to your With Statement:

.Axes(xlCategory, xlPrimary).HasTitle = True

Here, we’re switching the HasTitle property on. In between the round brackets of Axes, we’ve used the xlCategory type then, after a comma, the xlPrimary axis group.

To add some text for the X Axis add this rather long line:

Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Range(«A1»)

Again, we have .Axes(xlCategory, xlPrimary). This points to the X Axis. After a dot, we then have this:

This allows you to set the text. After an = sign, you can either type direct text surrounded by double quotes, or you can specify a cell on your spreadsheet. We’ve specified the cell A1. Whatever is in cell A1 will then be used as the text for the X Axis.

To set some text for the Y Axis (the Values one), add the following code to your With statement:

.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Range(«B1»)

This is similar to the code for the X Axis. The difference is that we are now using the xlValue type. We’ve also set cell B1 to be used as the text.

Your code window should now look like this:

Delete the previous chart, and run your code again. The chart that Excel creates should now look like this:

We now have a chart with a different chart title. The X Axis has been changed to read «Student Number», and the Y Axis is «Exam Score».

You can delete the chart sheet now, if you like. We’ll move on to embedded charts.

Внедрение диаграмм

В Excel»е есть два типа — Charts и ChartObjects.

Как я понял, разница в том, что Charts это Диаграмма-Лист, а ChartObjects это Диаграмма на Листе.

Добавляется Диаграмма-на-Листе вот так:

Это получено автоматической генерацией при записи макро.

Отсюда два вопроса:
1. Откуда там взялось Select
2. Как получить ссылку на вновь созданный объект?

На первый вопрос ответ, в общем-то, ясен — объект создается и на него наводится фокус, отчего он становится ActiveChart.
Тип у него Chart

Скорее всего, ссылка так и получается

Но вопросы остаются.

Например, чем отличаются свойства:
SeriesCollection и FullSeriesCollection

Построение диаграмм в VBA
Помогите с выполнением задания, совершенно не помню как делается((( Сделайте так, чтобы при.

Автоматическое построение диаграмм
Добрый вечер . Есть необходимость строить диаграммы на основе большой таблицы . В таблице более.

Нумерация диаграмм на листе
Добрый день! Не могу понять принцип нумерации диаграмм. На моём листе (листов много, но работаю с.

Access — внедрение переменной в запрос
необходимо в запросе перебрать много значений с фиксированным шагом. идея как бы проста — делаю.

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

Читать еще:  Скачать видео с нета

Добавлено через 2 минуты
И будь благодарным к тому кто тебе вообще чтото советует, а то я заметил что ты думаешь только о себе
и скоро не только я это замечу

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

При этом обращение по имени «ABCD» прекрасно срабатывает.
В общем, суммируя свой невеликий опыт, скажу, что работая с чартами, желательно особо не фантазировать, потому что начинают проявляться самые неожиданные эффекты, например диаграмма создаётся сразу с миллионом рядов и при попытке прибавить новую серию программа сразу выскакивает из процедуры построения

Кусок, данный Alex77755, реально работает, но неудобство в определении имён рядов.
Предлагаю маленькую функцию для удобства:

Выдаёт и строки и столбцы, в зависимости от сочетания номеров начальных/конечных строк/столбцов

Обращаться примерно так:

Теперь понятно.
У меня тринадцатый, естественно, что при записи макро он даёт AddChart2 , а остальными пренебрегает.

Добавлено через 1 час 18 минут
Вообще-то, метод ChartObjects.Add представляется самым естественным, в том смысле, что он идентичен методам Add других коллекций — WorkBooks, WorkSheets и пр.

При создании новой диаграммы на ней появляется тьма рядов.
Причем, что интересно, такое получается не всегда, иногда она создается пустой и новые ряды вставляются строго так, как указано в коде.
Вроде бы это связано с какими-то умолчаниями в Excele, который таким образом «помогает» юзеру.

Как с этим бороться, чтобы создавались строго пустые диаграммы?

Добавлено через 4 минуты
Здесь SWRow это строка на странице SW, откуда берутся данные для графика.
На следующей строке 1+SWRow расположена копия строки SWRow. Это нужно для того, чтобы при изменении строки SWRow можно было отслеживать изменения.

В коде создаются две серии, вторая с именем Copy.
Так вот, иногда появляется тьма серий с активной страницы, которых никто не «заказывал».

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

Добавлено через 41 минуту
Оказывается, прямо здесь предлагалось решение — при создании диаграммы полностью удалять все серии на ней.
Работа с диаграммами: при создании графика непроизвольно появляются ряды данных
Вопрос, вот такой код пойдёт:

Добавлено через 11 минут
=============
Работает!
Единственно, надо переменную MySeries как-то описать.
Поскольку с типами в диаграммах страшные заморочки, я объявил его как Object, пошло .

Добавлено через 1 час 43 минуты
Хотя без проколов не обошлось, надо сказать.
Активированное состояние может запросто слететь само собой, так что ActiveChart.SeriesCollection станет Nothing.
При этом ошибки не будет, но работа процедуры на этом закончится, т.е. все последующие действия не будут выполнены.
On Error Resume Next не поможет, потому что обращение к Nothing как к коллекции ошибкой не является.

Поэтому перед прогоном цикла For Each надо активировать Диаграмму

А вот если Диаграмма активна, но коллекция пуста, тогда On Error работает.

Excle VBA — Chart Sheets

In this section, you’ll learn how to manipulate charts with VBA.

There are two types of chart you can manipulate with VBA code. The first is a chart sheet, and the second is an embedded chart. A chart sheet is a separate sheet in your workbook, with its own tab that you click on at the bottom of Excel. An embedded chart is one that is inserted onto a worksheet. The two types of chart, sheet and embedded, use slightly different code. We’ll concentrate on embedded charts. But just to get a flavour of how to create chart sheets with VBA, start a new spreadsheet. Enter some data in cells A1 to B11. Something like the following:

Click Developer > Visual Basic to get at the coding windows. Create a new Sub in Sheet 1. Call it ChartSheetExample. Add the following line:

Dim ChartSheet1 As Chart

Your code should look like this:

So instead of an Integer variable type or a string variable type, we now have a Chart type. The name we’ve given this Chart variable is ChartSheet1.

To add a chart sheet, all you need is the call to the Add method. However, we’ll set up our ChartSheet1 variable as an object, so that we can access the various chart properties and methods. Add the following line to your code:

Set ChartSheet1 = Charts.Add

Now add a With End With statement:

The first thing we can do is to add the data for the chart. To do that, you need the SetSourceData method. This method takes a parameter called Source. The Source parameter needs a range of cells to grab data from. Here’s the code to add:

After Source:= we have this:

This gets a reference to a Sheet called «Sheet1». The Range of cells we want is cells B1 to B11. Your coding window should now look like this:

You can run your code at this stage. Press F5 on your keyboard, or click Run > Run Sub/User Form from the menus at the top of the VBA window. You should find that a new Chart sheet opens up in Excel:

Notice that Excel has automatically added a column chart. You can specify what kind of chart you need, however, by using the ChartType property. For the type of column chart Excel has added, you need the enumeration xlColumnClustered:

.SetSourceData Source:=Sheets(«Sheet1»).Range(«B1:B11»)
.ChartType = xlColumnClustered

There are lots of other values (constants) you can add for the ChartType in place of xlColumnClustered. Click the link below to see a reference page of all the ChartType constants:

The values we added in the A column of the spreadsheet have been used for the X Axis (Category Axis) of the chart sheet, and the scores themselves as the Y Axis (Values Axis). The same text has been used for the chart title and the series legend — «Exam score». You can change all this.

To set a chart title at the top, your first need to switch on the HasTitle property:

You can then set the Text property of the ChartTitle property. Like this:

.ChartTitle.Text = «Chart Sheet Example»

Obviously, between the quotes marks for the Text property, you can add anything you like. This will then be used at the top of the chart.

To set some text below the X and Y Axes, you need the Axes method. After a pair of round brackets, you need two things: a Type and an Axis Group. The Type can be one of the following: xlValue, xlCategory, or xlSeriesAxis (used for 3D charts). The Axis Group can be either xlPrimary or xlSecondary. Add the following to your With Statement:

.Axes(xlCategory, xlPrimary).HasTitle = True

Here, we’re switching the HasTitle property on. In between the round brackets of Axes, we’ve used the xlCategory type then, after a comma, the xlPrimary axis group.

To add some text for the X Axis add this rather long line:

Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Range(«A1»)

Again, we have .Axes(xlCategory, xlPrimary). This points to the X Axis. After a dot, we then have this:

This allows you to set the text. After an = sign, you can either type direct text surrounded by double quotes, or you can specify a cell on your spreadsheet. We’ve specified the cell A1. Whatever is in cell A1 will then be used as the text for the X Axis.

Читать еще:  Vba excel найти

To set some text for the Y Axis (the Values one), add the following code to your With statement:

.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Range(«B1»)

This is similar to the code for the X Axis. The difference is that we are now using the xlValue type. We’ve also set cell B1 to be used as the text.

Your code window should now look like this:

Delete the previous chart, and run your code again. The chart that Excel creates should now look like this:

We now have a chart with a different chart title. The X Axis has been changed to read «Student Number», and the Y Axis is «Exam Score».

You can delete the chart sheet now, if you like. We’ll move on to embedded charts.

Categorized | excel chart, excel macro and vba

VBA Chart

Making a chart using VBA can be easy. VBA provides a handle to a chart object using the “ChartObject” class and to the chart data series trough the “Series” class. Let’s look at a basic example where we use VBA to create an empty chart to our spreadsheet and then add data to it.

Sub CreateChart()
Dim ChartObj As ChartObject
Dim ChartSeries as Series

Set ChartObj = ActiveSheet.ChartObjects.Add ( Left: = 100, Width: = 550, Top: = 75, Height: = 325)
Set ChartSeries = ChartObj.Chart.SeriesCollection.NewSeries

With ChartSeries
.Name = «Chart Series 1»
.Values = Array(1, 2, 3, 4, 5)
.XValues = Array( «alpha» , «beta» , «gamma» , «delta» , «epsilon» )
End With
End Sub

In the example above, we’ve instantiated a chart using the ChartObject class. As you would have noticed, at the time of creation of the chart, we also specified the X-Y coordinates plus the height and width parameters. If you were to stop the code at this point and go back and look at the spreadsheet, you will see a blank chart – one that has all the features but no data. In the next step, we use the “Series” object to add data to the chart. In crude terms, a data series is collection of data points and appears in the chart’s source data under a single name. Let’s take a closer look at each of these.

The Chart Object

A simple chart can be made using just a single line of code:

What we’ve asked the application to do is to add another chart to the spreadsheet with given XY-coordinated and size. The add function returns the reference to the newly created chart. We can now use functions such as .activate, .delete, .copy etc to work with this chart object. We can also specify the chart type at this stage using the ActiveChart.ChartType = xlLineMarkers (or any other chart type that you wish to use).

In all the succeeding steps, whenever you need to refer to the chart, you can use ChartObj.Chart (the chart embedded in the Chart Object. Here’s a sample:

(Data) Series

A single data series consists of multiple data points. For example, a data series in a line chart typically contains data for more than one data point. You can add a series to the chart using the following VBA code

.Name = The named that you want to give to this data series. This is the name as the you would like to appear in the legend.

.Values = These are the values that you would like to plot

.XValues = These are the category x lables

Important to note is that the .XValues parameter can be specified in two ways:

Specifying .XValues as array (or string)

One can specify the .XValues as an array using by creating an array as given in the example above or by providing an array of strings using .XValues = label_values (where lable_values = the array of strings with each individual array in the string holding one data label)

Sub try()
Dim label_values() As String
Dim individual_label_value As Variant
Dim counter As Long
Dim ChartObj As ChartObject
Dim ChartSeries As Series

‘Get the number of lables that you will need to have for the chart Ex. say 7
ReDim label_values(4) As String
counter = 1

For counter = 0 To 4
label_values(counter) = «MySeries » & counter + 1
Next counter

Set ChartObj = ActiveSheet.ChartObjects.Add(Left:=100, Width:=550, Top:=75, Height:=325)
Set ChartSeries = ChartObj.Chart.SeriesCollection.NewSeries

With ChartSeries
.Name = «Chart Series 1»
.Values = Array(1, 2, 3, 4, 5)
.XValues = label_values
End With
End Sub

Specifying .XValues as a range

The .XY values can also be specified as a range of the worksheet. The code would read something like this:

Sub CreateChart()
Dim ChartObj As ChartObject
Dim ChartSeries as Series

Set ChartObj = ActiveSheet.ChartObjects.Add(Left:=100, Width:=550, Top:=75, Height:=325)

Set ChartSeries = ChartObj.Chart.SeriesCollection.NewSeries
With ChartSeries
.Name = «Chart Series 1»
.Values = Sheets( «Sheet1» ).Range( «A1:A10» )
.XValues = Sheets( «Sheet1» ).Range( «B1:B10» )
End With
End Sub

where the range A1:A10 and B1:B10 contain the data and the X-category labels. Now if you wanted to have more than one data series, you could have added them by using this code in a VBA loop.

The intersting thing to note is that there is a restriction on the maximum number of characters that can be added as .XValues in above code. If you look at the second example, this limit will not be breached under normal circumstances since only the address of the range is being provided. That can ensure that you can add a large number of labels without having to worry about this limitation. However, if you wanted to specify those values as static values using an Array, you’d end up having to restrict the number of lables you can accomodate in the chart. If you exceed this value, the application will throw the following errror.

So if you are going to write code that may breach this limit, ensure that you catch the runtime error using the On Error statement.

Chart Type

You can specify the chart type parameter for the entire chart using the ActiveChart.ChartType = [chart_type] instruction or for each individual data series using the .ChartType = [chart_type] instruction (where chart_type is an application defined constant indicating the type of chart to use). Oftentimes when you record a macro, the resulting VBA code will have these constants mentioned as xlLine or xlColumnClustered etc. However it is entirely possible to use numbers insted of constants as the .ChartType parameter as well. So for the chart that you’ve just created, you can simply write ChartObj.Chart.ChartType = xlRadarMarkers (or ChartObj.Chart.ChartType = 81) and that would change the chart type to radar chart.

List of all Chart Types (.ChartTypes) in VBA

As I said before, one can use numerical values instead of constants for creating charts in VBA. By using numerical values instead of constants, you can parameterize your VBA code and have better interactivity between the excel spreadsheet and VBA code (say a named list and chart type in VBA)

You can download this example showing how to create a chart using VBA here or click on the button below:

Ссылка на основную публикацию
Adblock
detector