Как сделать график в vba

Как сделать

Как применяется VBA для построения диаграмм в Excel

Содержание

Методы объекта Chart

Рассмотрим основные методы, определяющие новое поведение объекта Chart:

SubChartWizard ([Source], [Gallery], [Format], [PlotBy], [CategoryLabels], [SeriesLabels], [HasLegend], [Title], [CategoryTitle], [ValueTitle], [Extra-Title])

Этот метод позволяет построить или модифицировать существующую диаграмму. В отличие от мастера диаграмм (ChartWizard), который вызывается при построении диаграммы вручную, метод не является интерактивным, более того, он не позволяет задать все возможные свойства. С его помощью можно выполнить основную работу, а детали строятся с использованием других свойств и методов объекта Chart. Все параметры метода являются необязательными:

Sub SetSourceData (source as range, [plotby]). Устанавливает источник данных диаграммы. Второй параметр соответствует терминальному свойству plotby.

Function Location (where as xlchartlocation, [name]) as Chart. Передвигает диаграмму в новое местоположение. Параметр Where имеет следующие значения: xlLocationAsNewSheet, xlLocationAsObject или xlLocationAutomatic.

В первом случае диаграмма помещается на новый лист диаграммы и параметр Name задает имя этого листа. Во втором случае диаграмма помещается как встроенный объект и Name задает имя рабочего листа.

Создание VBA программы

По введенным в диалоговое окно «Построение графика» начальным, конечным значениям аргументов и их шагам изменения строится график. Уравнение графика также вводится в программу из диалогового окна. Уравнение должно быть составлено в соответствии с правилами, по которым строятся функции рабочего листа, но в качестве аргументов в нем следует использовать х вместо ссылки на ячейку. Программа сама переведет аргумент в ссылку на ячейку. После табуляции введенной функции программой и построения поверхности на рабочем листе этот график также отображается в объекте управления Image, расположенном в диалоговом окне Построение графика.

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

Диалоговое окно «Построение графика» в рабочем состоянии

Результат построения графика на рабочем листе

Нажатие кнопки Построение запускает на выполнение процедуру CommandButton 1__ C 1 ick

Пример сообщения о несогласованности данных

Сообщение о некорректном вводе формулы

Нажатие кнопки Отмена запускает на выполнение процедуру CommandButton 2_ C 1 ick

Закрывает диалоговое окно.

Рассмотрим листинг данного приложения.

Private Sub CommandButton1_Click()

// Процедура табуляции функции

Dim х_нз As Double

Dim х_пз As Double

Dim х_шаг As Double

Dim УрГрафика As String

// Проверка корректности ввода данных

If IsNumeric(TextBox2.Text)=False Then

MsgBox «Ошибка в начальном значении х», vbInformation, «График»

If IsNumeric(TextBox3.Text)=False Then

MsgBox «Ошибка в шаге х», vbInformation, «График»

If IsNumeric(TextBox4.Text)=False Then

MsgBox «Ошибка в конечном значении у», vbInformation, «График»

// Считывание с диалогового окна значений переменных

// Проверка согласованности введенных данных

If х_нз >= х_пз Then

MsgBox «Начальное значение х слишком большое», vbInformation, «График»

If х_нз + х_шаг >= х_пз Then

MsgBox «Шаг х великоват», vbInformation, «График»

If Mid(УрГрафика, i, 1)=«x» Or Mid(УрГрафика, i, 1)=«X» Then

// Очистка на активном листе ранее введенных данных

// Заполнение диапазонов значениями аргумента

Range(«A1»).Value=х_нз ‘Ввод в ячейку A1 начального значения

// Создание арифметической прогрессии по столбцу с указанным шагом и начальным значением

Range(«A1»).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=х_шаг, Stop:=х_пз, Trend:=False

// Заполнение диапазона значениями функции

// Определение числа строк в диапазоне заполнения

// Ввод уравнения поверхности в ячейку B1

If IsError(Evaluate(УрГрафика))=True Then

MsgBox «Ошибка в формуле», vbExclamation, «График»

// Заполнение диапазона Range(Cells(1, 2), Cells(nx, 2))

// начиная с ячейки B1, что эквивалентно протаскиванию маркера

// заполнения ячейки B 1 на диапазон Range (Cells (1, 2),

Range(«B1»).AutoFill Destination:=Range(Cells(1, 2), Cells(nx, 2)), Type:=xlFillDefault

// Удаление с рабочего листа всех ранее построенных диаграмм

ActiveSheet.Range(Cells(1, 2), Cells(nx, 2)).Select

// Выбор диапазона, по которому строится график

ActiveSheet.ChartObjects.Add(20, 19.5, 192, 192).Select

// Задание и выбор области на рабочем листе, где будет построен график,

// размер графика должен соответствовать размеру объекта Image 1

ActiveChart.ChartWizard Source:=Range(Cells(1, 1), Cells(nx, 2)), Gallery:=xlLine, Format:=2, PlotBy:=xlColumns, CategoryLabels:=1, SeriesLabels:=0, HasLegend:=False, Title:=»График»,

CategoryTitle:=»Аргумент», ValueTitle:=»Функция y» & TextBox1.Text

// Запись диаграммы в файл и загрузка картинки в Image1

Private Sub CommandButton2 Click()

// Процедура закрытия диалогового окна

Private Sub UserForm Initialize()

// Рисунок масштабируется с учетом относительных размеров так, чтобы он помещался в объекте Image1

Источник

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

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

Одно из основных применений 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:

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

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

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

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

Источник

Объект Chart (Excel) Chart object (Excel)

Представляет диаграмму в книге. Represents a chart in a workbook.

Примечания Remarks

Диаграмма может представлять собой внедренную диаграмму (содержащуюся в объекте ChartObject) или отдельный лист диаграммы. The chart can be either an embedded chart (contained in a ChartObject object) or a separate chart sheet.

Коллекция Charts содержит объект Chart для каждого листа диаграммы в книге. The Charts collection contains a Chart object for each chart sheet in a workbook. Чтобы вернуть один объект Chart, используйте синтаксис Charts (индекс), где индекс — это номер индекса или имя листа диаграммы. Use Charts (index), where index is the chart-sheet index number or name, to return a single Chart object.

Номер индекса диаграммы представляет положение листа диаграммы на панели вкладок книги. The chart index number represents the position of the chart sheet on the workbook tab bar. Charts(1) — это первая (крайняя левая) диаграмма в книге; Charts(Charts.Count) — последняя (самая правая). Charts(1) is the first (leftmost) chart in the workbook; Charts(Charts.Count) is the last (rightmost).

Читайте также:  Как сделать кукольный сундук

Все листы диаграмм включаются в число индексов, даже если они скрыты. All chart sheets are included in the index count, even if they are hidden. Имя листа диаграммы отображается на вкладке книги для диаграммы. The chart-sheet name is shown on the workbook tab for the chart. Можно использовать свойство Name объекта ChartObject, чтобы установить или вернуть имя диаграммы. You can use the Name property of the ChartObject object to set or return the chart name.

В следующем примере изменяется цвет ряда 1 на листе диаграммы 1. The following example changes the color of series 1 on chart sheet 1.

В следующем примере диаграмма Sales (Продажи) перемещается в конец активной книги. The following example moves the chart named Sales to the end of the active workbook.

Объект Chart также является элементом коллекции Sheets, который содержит все листы книги (рабочие листы и листы диаграммы). The Chart object is also a member of the Sheets collection, which contains all the sheets in the workbook (both chart sheets and worksheets). Чтобы вернуть один лист, используйте синтаксис Sheets (индекс), где индекс — это номер индекса или имя листа. Use Sheets (index), where index is the sheet index number or name, to return a single sheet.

Если диаграмма является активным объектом, для ссылки на нее можно использовать свойство ActiveChart. When a chart is the active object, you can use the ActiveChart property to refer to it. Лист диаграммы активен, если пользователь выбрал его или он активирован с помощью метода Activate объекта Chart или метода Activate объекта ChartObject. A chart sheet is active if the user has selected it or if it has been activated with the Activate method of the Chart object or the Activate method of the ChartObject object.

В следующем примере активируется лист диаграммы 1, а затем задается тип и заголовок диаграммы. The following example activates chart sheet 1, and then sets the chart type and title.

Внедренная диаграмма активна, если пользователь выбрал ее или объект ChartObject, в котором она находится, активирован с помощью метода Activate. An embedded chart is active if the user has selected it, or the ChartObject object in which it is contained has been activated with the Activate method.

В следующем примере активируется внедренная диаграмма 1 на листе 1, а затем задается тип и название диаграммы. The following example activates embedded chart 1 on worksheet 1 and then sets the chart type and title. Обратите внимание, что после активации внедренной диаграммы код в этом примере совпадает с предыдущим примером. Notice that after the embedded chart has been activated, the code in this example is the same as that in the previous example. С помощью свойства ActiveChart можно написать код на языке Visual Basic, который может ссылаться на внедренную диаграмму или на лист диаграммы (в зависимости от активного объекта). Using the ActiveChart property allows you to write Visual Basic code that can refer to either an embedded chart or a chart sheet (whichever is active).

Если лист диаграммы является активным листом, для ссылки на него можно использовать свойство ActiveSheet. When a chart sheet is the active sheet, you can use the ActiveSheet property to refer to it. В следующем примере используется метод Activate для активации листа диаграммы Chart1, а затем задается синий цвет для ряда 1 на диаграмме. The following example uses the Activate method to activate the chart sheet named Chart1, and then sets the interior color for series 1 in the chart to blue.

События Events

Методы Methods

Свойства Properties

См. также See also

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Как сделать график в vba

VBA: Вставка и форматирование графиков. Как это cделать?

Triangle Дата: Четверг, 04.09.2014, 06:01 | Сообщение № 1

Всем привет!

Вожусь вот с экспериментальными данными. Хотел бы организовать рутинную работу. Буду рад, если подскажите, как это сделать..

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

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Insert_Graph

‘ выделяю нужный интревал
Range(«E10065:F10116»).Select

‘ вставляю отформатированный график из Template
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(«‘STAT’!$E$10065:$F$10116»)
ActiveChart.ApplyChartTemplate ( _
«C:\. адрес тут. \Templates\Charts\Histogram_black.crtx» _
)

[/vba]
Не работает. Появляется сообщение об ошибке:
«Run-time error ‘1004’:
The specified dimension is not valid for the current chart type»
При нажатии Debug, вот эта строчка выделяется жёлтым:
«ActiveSheet.Shapes.AddChart.Select»
Что тут неверно?

Вопрос 1:
Как правильно вставлять график из Templates?

Но это ещё не всё..
Затем я хотел бы сделать графики определённого размера, чтобы они все были одинаковые. При обычной встаке (ну, не макросом, а «ручками») графики появляются маленькие как я их не сохраняй. Вот тут уже обсуждался вопрос ресайза графиков на определённое количество ячеек. А можно изменять на определённое количество единиц Height и Width? В идеале было бы здорово дописать в макросе пару строчек кода, так чтобы после появления график автоматически ресайзился на заданное количество единиц (скажем, чтобы Height=7″ и Width=8″).

Вопрос 2:
Как с помощью макроса написанного в VBA изменить размер график на заданное количество единиц?

Всем привет!

Вожусь вот с экспериментальными данными. Хотел бы организовать рутинную работу. Буду рад, если подскажите, как это сделать..

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

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Insert_Graph

‘ выделяю нужный интревал
Range(«E10065:F10116»).Select

‘ вставляю отформатированный график из Template
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(«‘STAT’!$E$10065:$F$10116»)
ActiveChart.ApplyChartTemplate ( _
«C:\. адрес тут. \Templates\Charts\Histogram_black.crtx» _
)

[/vba]
Не работает. Появляется сообщение об ошибке:
«Run-time error ‘1004’:
The specified dimension is not valid for the current chart type»
При нажатии Debug, вот эта строчка выделяется жёлтым:
«ActiveSheet.Shapes.AddChart.Select»
Что тут неверно?

Вопрос 1:
Как правильно вставлять график из Templates?

Но это ещё не всё..
Затем я хотел бы сделать графики определённого размера, чтобы они все были одинаковые. При обычной встаке (ну, не макросом, а «ручками») графики появляются маленькие как я их не сохраняй. Вот тут уже обсуждался вопрос ресайза графиков на определённое количество ячеек. А можно изменять на определённое количество единиц Height и Width? В идеале было бы здорово дописать в макросе пару строчек кода, так чтобы после появления график автоматически ресайзился на заданное количество единиц (скажем, чтобы Height=7″ и Width=8″).

Вопрос 2:
Как с помощью макроса написанного в VBA изменить размер график на заданное количество единиц? Triangle

Сообщение Всем привет!

Вожусь вот с экспериментальными данными. Хотел бы организовать рутинную работу. Буду рад, если подскажите, как это сделать..

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

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Insert_Graph

‘ выделяю нужный интревал
Range(«E10065:F10116»).Select

‘ вставляю отформатированный график из Template
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(«‘STAT’!$E$10065:$F$10116»)
ActiveChart.ApplyChartTemplate ( _
«C:\. адрес тут. \Templates\Charts\Histogram_black.crtx» _
)

[/vba]
Не работает. Появляется сообщение об ошибке:
«Run-time error ‘1004’:
The specified dimension is not valid for the current chart type»
При нажатии Debug, вот эта строчка выделяется жёлтым:
«ActiveSheet.Shapes.AddChart.Select»
Что тут неверно?

Вопрос 1:
Как правильно вставлять график из Templates?

Но это ещё не всё..
Затем я хотел бы сделать графики определённого размера, чтобы они все были одинаковые. При обычной встаке (ну, не макросом, а «ручками») графики появляются маленькие как я их не сохраняй. Вот тут уже обсуждался вопрос ресайза графиков на определённое количество ячеек. А можно изменять на определённое количество единиц Height и Width? В идеале было бы здорово дописать в макросе пару строчек кода, так чтобы после появления график автоматически ресайзился на заданное количество единиц (скажем, чтобы Height=7″ и Width=8″).

Источник

Adblock
detector