启动此类任务的最简单方法是查看手动执行任务时会发生什么,使用宏记录器捕获 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 不需要,因为它在下面重复。
现在清理一下。对象浏览器在这里非常有用。如果您不熟悉,请尝试在 VBA 编辑器中按 F2。通过在上方下拉列表中选择“Excel”来稍微缩小上下文范围,然后查看 Classes 列表中的 Charts。在“成员...”列表中选择 Add 会在下方窗格中显示:
Function Add([Before], [After], [Count]) As Chart
Member of Excel.Charts
所以Charts.Add 返回一个图表,它必须是在其余代码中重复引用的ActiveChart。像这样的重复很乏味(并且可能会影响性能),所以我会重新工作一点。假设为了练习,我们将在运行宏之前选择我们的目标数据,所以当宏运行时它将位于Selection。在对象浏览器中查看图表的成员,很明显SetSourceData 中的Source 应该是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
从那里,您应该能够找到各种自定义项(记住对象浏览器!)以获取您想要的图表。 (请记住,根据您的 Excel 版本,可能有一些次要功能无法通过 VBA 访问。)