Можливо, найкращим способом ознайомлення з об'єктною моделлю об'єкта Chart є запис макросу під час створення та внесення змін до діаграми. Якщо при записі макросів створюється велика кількість зайвого та неефективного коду, цей код можна з успіхом використовувати в ознайомлювальних цілях — для отримання інформації про
Частина V. Досконалі методи програмування
4S5 об'єкти, властивості та методи, про які необхідно знати при керуванні діаграмами за допомогою коду VBA-
Команда запису макросів у Excel генерує код, у якому використовується лише активна діаграма, а надання самого об'єкта Chart застосовується властивість ActiveChart. В Excel не обов'язково виділяти об'єкт (або активізувати діаграму) для того, щоб керувати ним (нею) у коді VBA. Крім того, як зазначалося раніше, при записі макросу створюється велика кількість зайвого коду. Таким чином, якщо ефективність коду є одним з першочергових завдань, то вам доведеться редагувати код, отриманий після запису макросу (особливо якщо цей код використовується для управління діаграмами).
Результат запису макросу
Команда запису макросів була включена під час створення простої діаграми (показаної на рис. 18.1). Після створення діаграми (але ще в процесі запису макросу) її трохи змінили.
Мал. 18,1. Ця діаграма створювалася і редагувалася в процесі запису макросу в Excel
Нижче наводиться листинг коду, отриманого в результаті запису макросу. Sub MacrolO
1 Записаний макрос
ActiveChart.ChartType * xlColumnCluetered ActiveChart.SetSourceData _
Source «.«Sheets СЛист1М .Range ("A1-.F2") , _
PlotBy:=xlRowsActiveChart.LocaCion _
ActiveChart.HasLegend = False ActiveChart.ApplyDataLabels _
Тип:=xlDataLabelsShowValue, LegendKey;=False ActiveChart.HasDataTable = False ActiveChart.Axes(xlCategory).Select Selection.TickLabels.Orientation = xlHorizontal
Глава 18. Управление диаграммами ActiveChart.ChartTitle.Select Selection.Font.Bold = True Selection.AutoScaleFont = True With Selection.Font .Name = "Arial"
.Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False
.Underline = xlUnderlineStyleNone -Colorlndex = xlAutomatic .Background = xlAutomatic End With
ActiveChart.PlotArea.Select Selection.Top = 18 Selection.Height = 162 ActiveChart.ChartArea.Select ActiveChart.Axes(xlValue).Вибрати за допомогою ActiveChart.Axes(xlValue) .MinimumScalelsAuto = True .MaximumScale = 0,6 .MinorUnitls Auto = True .MajorUnitlsAuto = True .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear End With End Sub
Більша частина коду, отримана при записі макросу в попередньому розділі, не так важлива, як виглядає на перший погляд. Вона використовується для встановлення властивостей значень, які в подальшому файлі не будуть. Ниже наведено листинг відредактованого коду макроса. Цей код виконує ту саму дію, що і код із попереднього розділу, однак він набагато короче та ефективніший. Установка властивості ScreenUpdating у значенні False передбачає оновлення екрану.
Application.ScreenUpdating = False Charts.Add
Де:=xlLocationAsObj ect, Ім’я:="Лист1"
Часть V. Совершенные методы программирования
457 .Axes(xlValue).MaximumScale = 0,6 .Скасувати вибір End With
Application.ScreenUpdating = True End Sub
При створенні діаграми за допомогою методу Додати колекціїcharts ви завжди будете використовувати аркуш діаграми. У попередньому коді метод Location переміщує діаграму на робочий аркуш.
Метод Location об'єкта Chart викликає особливий інтерес, оскільки він формально створює новий об'єкт, а чи не перемішає існуючий. Щоб переконатися в цьому, виконайте наступний код.
MsgBox ActiveChart.Name ActiveChart.Location _
MsgBox ActiveChart.Name End Sub
Ця процедура додає діаграму (аркуш діаграми) та представляє вікно повідомлення, яке відображає ім'я активної діаграми. Метод Location переміщує діаграму на робочий аркуш. Наступне вікно повідомлення показує ім'я активної діаграми, яке відрізняється від попередньої активної діаграми. Початковий об'єкт Chart припиняє своє існування і замінюється новий об'єктом Chart, який розташований в об'єкті ChartObject. Попередня 225 226 227 228 229 230 .. 370 >> Наступна