Шаг 191.
VBA в MSExcel. Практические приемы программирования на VBA. Тема: решение уравнения,.... Построение диаграммы. Практика (окончание)

    На этом шаге мы рассмотрим использование макрорекордера и метода ChartWizard.

    Процедура ПостроениеГрафика из предыдущего шага выглядит довольно громоздкой. При ее написании лучше всего воспользоваться MacroRecorder, который переведет производимые пользователем вручную действия по построению диаграммы на язык VBA. Итак, для активизации MacroRecorder выберите команду Сервис | Макрос | Начать запись (Tools | Macro | Record New Macro) и запустите MacroRecorder на запись. После задания всех параметров в появившемся диалоговом окне Запись макроса (Record Macro) и нажатия кнопки ОК появится плавающая панель инструментов с кнопкой Остановить запись (Stop Recording). Теперь все производимые действия будут записываться до тех пор, пока не будет нажата эта кнопка. Постройте диаграмму по следующему алгоритму:

  1. Нажмите кнопку Мастер диаграмм (Chart Wizard) панели инструментов Стандартная (Standard).
  2. В появившемся окне первого шага Мастера диаграмм на вкладке Стандартные (Standard Types) в списке Тип (Chart type) выберите График (Line), а в группе Вид (Chart sub-type) - четвертый элемент. Нажмите кнопку Далее > (Next >).
  3. В появившемся окне второго шага Мастера диаграмм на вкладке Диапазон данных (Data Range) выберите переключатель Ряды в столбцах (Series in Columns) и в поле Диапазон (Data range) введите ссылку на диапазон =Лист1!$B$2:$B$12, отводимый под значения функции, график которой строится. В поле Подписи оси X (Category (X) axis labels) вкладки Ряд (Series) введите ссылку на диапазон =Лист1!$A$2:$A$12, отводимый под значения аргумента. Нажмите кнопку Далее > (Next >).
  4. В появившемся окне третьего шага Мастера диаграмм на вкладке Заголовки (Titles) в поле Название диаграммы (Chart title) введите Зависимость корня от параметра, в поле Ось X (категорий) (Category (X) axis) - Параметр, в поле Ось Y (значений) (Category (Y) axis) - Корень. На вкладке Легенда (Legent) снимите флажок Добавить легенду (Show Legent). Нажмите кнопку Далее > (Next >).
  5. В появившемся окне четвертого шага мастера диаграмм в группе Поместить диаграмму на листе (Place chart) выберите переключатель имеющемся (As object in). Нажмите кнопку Готово (Finish).
  6. В построенной диаграмме ухватитесь за маркер изменения размера и увеличьте размер диаграммы. После этого, ухватившись за маркер переноса, переместите диаграмму в требуемое место на рабочем листе.

    Перечисленные выше действия будут переведены 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
Полный текст этого примера можно взять здесь.

    На следующем шаге мы продолжим разработку приложений.




Предыдущий шаг Содержание Следующий шаг