Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы.doc
Скачиваний:
28
Добавлен:
21.11.2018
Размер:
16.91 Mб
Скачать

Усовершенствованная процедура построения диаграмм

Теперь создадим процедуру, которая проверяла бы количество выделенных столбцов данных, и если выделено два столбца, то строила бы круговую диаграмму, а если выделено три столбца - гистограмму (столбчатую диаграмму). Для этого выполните следующие действия.

  1. Измените заголовок столбца В - в ячейку В1 введите 1-й квартал.

  2. Заполните шесть ячеек столбца С: в ячейку С1 введите 2-й квартал, в ячейку С2 введите число 1000, в ячейку C3 - 1150, в С4 - 875, в С5 - 1270 и в ячейку С6 - 1395.

  3. Удалите из рабочего листа все диаграммы.

  4. Выделите диапазон А1:С6 и выполните команду Сервис > Макрос > Начать запись. В диалоговом окне Запись макроса задайте имя макроса, например Гистограмма. Щелкните на кнопке ОК для начала записи макроса.

  5. Щелкните на кнопке Мастер диаграмм стандартной панели инструментов. Появится первое окно мастера диаграмм.

  6. Выберите тип диаграммы Гистограмма. Щелкните на кнопке Готово для создания диаграммы.

  7. Остановите запись макроса.

Теперь у вас есть два макроса-процедуры для создания диаграмм: КруговаяДиаграмма и Гистограмма. Скомбинируем эти две процедуры в одну, которая бы строила диаграмму того или иного типа в зависимости от количества выделенных столбцов. Нажмите <Alt+F11> для перехода в редактор Visual Basic. Создайте новую процедуру с именем МояДиаграмма. Введите следующий код в эту процедуру:

Dim rCurrentRange As Range

Set rCurrentRange = Selection

If Selection.Columns.Count = 2 Then

Перейдите в процедуру КруговаяДиаграмма и скопируйте следующие строки кода:

Charts.Add

ActiveChart.ChartType = xlPie

ActiveChart.SetSourceData Source:= rCurrentRange, PlotBy:=xlColumns

ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"

ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowPercent, _

 LegendKey:=False, HasLeaderLines:=True

He забывайте, что в редакторе Visual Basic для копирования, вырезания и вставки кода можно использовать стандартные комбинации клавиш: <Ctrl+C>, <Ctrl+X> и <Ctrl+V> соответственно.

Вставьте скопированные строки в процедуру МояДиаграмма после оператора If. После вставленных строк в новой строке введите код

ElseIf Selection.Columns.Count > 2 Then

Перейдите в процедуру Гистограмма и скопируйте оттуда строки

Charts.Add

ActiveChart.ChartType = xlColumnClustered

ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:C6")

ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"

Вставьте эти строки в процедуру МояДиаграмма после оператора ElseIf. В операторе ActiveChart.SetSourceData замените Sheets("Лист1").Range("А1:С6") на rCurrentRange. Далее с новой строки введите следующее:

Else

 MsgBox "Выделенный диапазон не подходит для построения диаграммы"

 Exit Sub

End If

With ActiveChart

 .HasTitle = True

 .ChartTitle.Characters.Text = "Объемы продаж"

 .ChartTitle.Select

End With

Из процедуры КруговаяДиаграмма скопируйте следующий код:

Selection.AutoScaleFont = True

With Selection.Font

 .Name = "Arial"

 .FontStyle = "полужирный курсив"

 .Size = 14

 .Strikethrough = False

 .Superscript = False

 .Subscript = False

 .OutlineFont = False

 .Shadow = False

 .Underline = xlUnderlineStyleNone

 .ColorIndex = xlAutomatic

 .BackGround = xlAutomatic

End With

Вставьте этот код в процедуру МояДиаграмма после оператора End With. Полный код процедуры показан в листинге 18.2.

Листинг 18.2. Процедура МояДиаграмма

1: Sub МояДиаграмма()

2:  Dim rCurrentRange As Range

3:  Set rCurrentRange = Selection

4:

5:  If Selection.Columns.Count = 2 Then

6:   Charts.Add

7:   ActiveChart.ChartType = xlPie

8:   ActiveChart.SetSourceData Source:=rCurrentRange, _

9:    PlotBy:=xlColumns

10:   ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"

11:   ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowPercent, _

12:    LegendKey:=False, HasLeaderLines:=True

13:  ElseIf Selection.Columns.Count > 2 Then

14:   Charts.Add

15:   ActiveChart.ChartType = xlColumnClustered

16:   ActiveChart.SetSourceData Source:=rCurrentRange

17:   ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"

16:  Else

19:   MsgBox "Выделенный диапазон не подходит для построения _

20:    диаграммы"

21:   Exit Sub

22:  End If

23:

24:  With ActiveChart

25:   .HasTitle = True

26:   .ChartTitle.Characters.Text = "Объемы продаж"

27:   .ChartTitle.Select

28:  End With

29:

30:  Selection.AutoScaleFont = True

31:  With Selection.Font

32:   .Name = "Arial"

33:   .FontStyle = "полужирный курсив"

34:   .Size = 14

35:   .Strikethrough = False

36:   .Superscript = False

37:   .Subscript = False

38:   .OutlineFont = False

39:   .Shadow = False

40:   .Underline = xlUnderlineStyleNone

41:   .ColorIndex = xlAutomatic

42:   .Background = xlAutomatic

43:  End With

44:

45: End Sub

При создании этой процедуры мы использовали в основном копирование и вставку кода из ранее созданных макросов. "Изюминкой" этой процедуры является применение оператора If. Этот оператор проверяет значение свойства Columns.Count, равное количеству столбцов в выделенном диапазоне ячеек. Если это значение равно 2, то строится круговая диаграмма, если больше двух - строится гистограмма, если выделен один столбец, то выводится соответствующее окно сообщения. Работу этого оператора можно представить в виде следующей схемы:

If Selection.Columns.Count = 2 Then

 'код создания круговой диаграммы

Else IfSelection.Columns.Count > 2 Then

 'код создания гистограммы

Else

 MsgBox "Выделенный диапазон не подходит для построения диаграммы"

 Exit Sub

End If

После создания диаграммы процедура добавляет заголовок диаграммы и форматирует его. Для тестирования созданной процедуры перейдите в рабочую книгу и удалите все ранее созданные диаграммы. Выделите диапазон А1:С6 и выполните процедуру МояДиаграмма. Результат показан на рис. 18.4.

Рис. 18.4. Так как выделенный диапазон содержит более двух столбцов, то процедура построила гистограмму

Удалите гистограмму и выделите диапазон А1:В5. Снова выполните процедуру МояДиаграмма. Теперь будет создана круговая диаграмма. Сохраните рабочую книгу с именем Час18.

Резюме

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

В этом часе мы написали очень мало кода: сначала записали пару макросов, а потом просто использовали код этих макросов. Такой подход сэкономил нам много времени, которое пришлось бы потратить на "добывание" сведений об объектах, их свойствах и методах, необходимых для построения диаграмм. Многие разработчики приложений VBA используют этот подход: сначала записывают необходимые макросы, которые по возможности выполняли бы задуманное разработчиком, а затем изменяют и используют код этих макросов.