Самый простой способ запустить такую задачу - посмотреть, что происходит, когда вы выполняете задачу вручную, используя Macro Recorder для захвата VBA-эквивалента.
Например, я только что записал это (в Excel XP, но более поздние версии должны быть похожими). Код точно такой, как записано:
Option Explicit
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 09/07/2010 by MW
'
'
Range("B4:D6").Select
Charts.Add
ActiveChart.ChartType = xlColumnStacked
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B4:D6"), PlotBy:= _
xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
End Sub
Глядя на вышесказанное, я бы сказал, что первая строка, Range("B4:D6").Select
не нужна, поскольку она повторяется далее.
Теперь немного почистить. Здесь Object Browser может быть чрезвычайно полезным. Если вы не знакомы, попробуйте нажать F2 в редакторе VBA. Немного сузьте контекст, выбрав «Excel» в верхнем раскрывающемся списке и посмотрите на диаграммы в списке классов. Выбор Add
в списке «Участники ...» дает это в нижней панели:
Function Add([Before], [After], [Count]) As Chart
Member of Excel.Charts
Таким образом, Charts.Add
возвращает диаграмму, которая должна быть ActiveChart
, на которую неоднократно ссылаются в оставшейся части кода. Подобное дублирование утомительно (и может повлиять на производительность), поэтому я бы немного переделал. Давайте предположим, что во время упражнения мы собираемся выбрать целевые данные перед запуском макроса, поэтому он будет в Selection
при запуске макроса. Глядя на элементы Chart в обозревателе объектов, становится очевидно, что Source
в SetSourceData
должно быть Range
. Давайте попробуем это:
Sub Macro1()
With Charts.Add
.ChartType = xlColumnStacked
.SetSourceData Source:=Selection, PlotBy:=xlRows
.Location Where:=xlLocationAsObject, Name:="Sheet1"
End With
End Sub
Это не работает на моей машине - я думаю, Selection
, вероятно, меняется, когда активируется график. Поэтому мы должны зафиксировать диапазон перед началом работы с графиком:
Sub CreateStackedColumnChartFromSelection()
Dim src As Range
Set src = Selection
With Charts.Add
.ChartType = xlColumnStacked
.SetSourceData Source:=src, PlotBy:=xlRows
.Location Where:=xlLocationAsObject, Name:="Sheet1"
End With
End Sub
Оттуда вы сможете найти все виды настроек (вспомните Object Browser!), Чтобы получить диаграмму, как вы хотите. (Имейте в виду, что, в зависимости от вашей версии Excel, может быть несколько незначительных функций, недоступных через VBA.)