Excel. Трюки и эффекты | страница 152



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

Листинг 4.5. Сохранение диаграммы под указанным именем

Sub InteractiveSaveChart()

Dim strFileName As String ' Имя файла для сохранения

' Проверка, выделена ли диаграмма

If ActiveChart Is Nothing Then

' Нет выделенных диаграмм

MsgBox «Выделите диаграмму»

Else

' Выбор файла для сохранения

strFileName = Application.GetSaveAsFilename( _

ActiveChart.Name & «.gif», «Файлы GIF (*.gif), *.gif», 1, _

«Сохранить диаграмму в формате GIF»)

' Проверка, выбран ли файл

If strFileName <> "" Then

' Сохранение выделенной диаграммы в файл

ActiveChart.Export strFileName, «GIF»

End If

End If

End Sub

Как и в предыдущем примере, перед сохранением диаграмму нужно выделить, иначе появится окно с соответствующим сообщением. После запуска макроса откроется окно Сохранить диаграмму в формате GIF (см. соответствующую строку приведенного выше кода), в котором по обычным правилам Windows указывается путь для сохранения и присваивается имя файлу диаграммы.

Построение и удаление диаграммы нажатием одной кнопки

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

Предположим, у нас есть следующие исходные данные (выручка по торговым точкам), на основании которых нужно построить диаграмму (рис. 4.5).

Рис. 4.5. Исходные данные для построения диаграммы


Теперь нам нужно написать код, который представлен в листинге 4.6. Этот код должен быть помещен в модуль рабочего листа.

Листинг 4.6. Быстрое построение и удаление диаграммы

Sub CreateChart()

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

Charts.Add

' Параметры диаграммы

' Тип диаграммы

ActiveChart.ChartType = xlLineMarkers

' Заголовок

ActiveChart.SetSourceData Range(«B1:E2»), xlRows

ActiveChart.Location xlLocationAsObject, Name

' Остальные параметры

With ActiveChart

' Заголовок

.HasTitle = True

.ChartTitle.Characters.Text = Name

' Заголовок оси категорий

.Axes(xlCategory, xlPrimary).HasTitle = True

.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text _

= Sheets(Name).Range(«A1»).Value

' Заголовок оси значений

.Axes(xlValue, xlPrimary).HasTitle = True

.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text _

= Sheets(Name).Range(«A2»).Value

' Отображение легенды

.HasLegend = False

.HasDataTable = True

.DataTable.ShowLegendKey = True

' Настройка отображения сетки