На этом шаге мы рассмотрим использование макрорекордера и метода ChartWizard.
Процедура ПостроениеГрафика из предыдущего шага выглядит довольно громоздкой. При ее написании лучше всего воспользоваться MacroRecorder, который переведет производимые пользователем вручную действия по построению диаграммы на язык VBA. Итак, для активизации MacroRecorder выберите команду Сервис | Макрос | Начать запись (Tools | Macro | Record New Macro) и запустите MacroRecorder на запись. После задания всех параметров в появившемся диалоговом окне Запись макроса (Record Macro) и нажатия кнопки ОК появится плавающая панель инструментов с кнопкой Остановить запись (Stop Recording). Теперь все производимые действия будут записываться до тех пор, пока не будет нажата эта кнопка. Постройте диаграмму по следующему алгоритму:
Перечисленные выше действия будут переведены MacroRecorder в следующий макрос.
Sub Макрос1() ' ' Макрос1 Макрос ' Макрос записан 25.01.2014 (user) ' ' Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("B2:B12"), PlotBy:= _ xlColumns ActiveChart.SeriesCollection(1).XValues = "=Лист1!R2C1:R12C1" ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = "Зависимость корня от параметра" .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Параметр" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Корень" End With ActiveChart.HasLegend = False ActiveSheet.ChartObjects("Диагр. 1").Activate ActiveChart.ChartArea.Select ActiveSheet.Shapes("Диагр. 1").ScaleHeight 1.17, msoFalse, _ msoScaleFromBottomRight ActiveSheet.Shapes("Диагр. 1").IncrementLeft 124.5 ActiveSheet.Shapes("Диагр. 1").IncrementTop -25.5 End Sub
He трудно заметить, что данный макрос построения диаграмм сильно привязан к конкретному диапазону данных, рабочему листу и имени диаграммы. В процедуре ПостроениеГрафика этот макрос существенно видоизменен для того, чтобы избавиться от этих обременительных ограничений. Кроме того, в ней предусмотрено удаление всех ранее построенных на рабочем листе диаграмм с тем, чтобы они не наслаивались друг на друга при многократном запуске приложения на одном и том же рабочем листе.
Процесс создания процедур для построения графиков с использованием MacroRecorder, особенно для избавления процедуры от привязки к конкретному диапазону данных, рабочему листу и имени диаграммы, кому-то может показаться излишне искусственным. Им советуем для построения графиков использовать метод ChartWizard, дающий более быстрый путь к цели. Ниже приведены необходимые изменения в процедуре ПостроениеГрафика для метода ChartWizard. Уже поверхностное сравнение старой и новой версий процедуры ПостроениеГрафика показывает, что благодаря методу ChartWizard процедура стала компактнее. Кроме того, теперь она использует меньше вспомогательных переменных, необходимых при построении диаграммы.
Sub ПостроениеГрафика() ' Процедура построения графика Dim n As Integer ' n - число строк диапазона, по которому строится график n = ActiveSheet.Cells(1, 1).CurrentRegion.Rows.Count ' Удаление всех ранее построенных диаграмм с рабочего листа ActiveSheet.ChartObjects.Delete ' (195, 30, 200, 190) - координаты области, где строится диаграмма ActiveSheet.ChartObjects.Add(195, 30, 200, 190).Select ' Построение диаграммы ActiveChart.ChartWizard Source:= _ Range(Cells(2, 1), Cells(n, 2)), _ Gallery:=xlLine, Format:=4, PlotBy:=xlColumns, _ CategoryLabels:=1, SeriesLabels:=0, HasLegend:=False, _ Title:="3ависимость корня от параметра", _ CategoryTitle:="Параметр", _ ValueTitle:="Kopeнь", ExtraTitle:="" End Sub
На следующем шаге мы продолжим разработку приложений.