Самый простой способ начать подобную задачу — посмотреть, что произойдет, когда вы выполните задачу вручную, используя средство записи макросов для записи эквивалента 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
, когда макрос запустится. Глядя на элементы диаграммы в обозревателе объектов, становится очевидным, что 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.)
person
Mike Woodhouse
schedule
09.07.2010