如何将此Excel宏(VBA)更改为在任何工作表上运行?
我有一个excel,里面有几所学校的表格数据。每所学校都有单独的工作表。以下代码(记录的宏)将生成参考图纸的图表(如何将此Excel宏(VBA)更改为在任何工作表上运行?,vba,excel,worksheet,Vba,Excel,Worksheet,我有一个excel,里面有几所学校的表格数据。每所学校都有单独的工作表。以下代码(记录的宏)将生成参考图纸的图表(2002-CJS)。如何修改它以在任何工作表上创建图表 Sub Gendergraph() ' ' Gendergraph Macro ' ' ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlColumnClustered ActiveChart.SeriesCollection.Ne
2002-CJS
)。如何修改它以在任何工作表上创建图表
Sub Gendergraph()
'
' Gendergraph Macro
'
'
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "='2002 - CJS'!$B$2"
ActiveChart.SeriesCollection(1).Values = _
"='2002 - CJS'!$D$3:$D$6,'2002 - CJS'!$D$10:$D$12"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Name = "='2002 - CJS'!$E$2"
ActiveChart.SeriesCollection(2).Values = _
"='2002 - CJS'!$G$3:$G$6,'2002 - CJS'!$G$10:$G$12"
ActiveChart.SeriesCollection(2).XValues = _
"='2002 - CJS'!$B$3:$B$6,'2002 - CJS'!$B$10:$B$12"
End Sub
您需要开始考虑正在发生的一般过程—将图表添加到工作表中,然后设置图表的标题和数据 使用ActiveSheet(或任何活动的*对象)并不是一个很好的方法(或者说,Excel宏记录器写了一些糟糕的代码…) 我将使用的方法是将工作表传递到添加图表的Sub中,即
Sub Gendergraph(ws As Worksheet)
With ws.Shapes.AddChart.Chart
.ChartType = xlColumnClustered
With .SeriesCollection.NewSeries
.Name = ws.Range("B2")
.Values = Union(ws.Range("D3:D6"), ws.Range("D10:D12"))
End With
With .SeriesCollection.NewSeries
.Name = ws.Range("E2")
.Values = Union(ws.Range("G3:G6"), ws.Range("G10:G12"))
.XValues = Union(ws.Range("B3:B6"), ws.Range("B10:B12"))
End With
End With
End Sub
现在,您只需要另一个例程,将每个工作表传递到该过程中,您的所有工作表都将添加一个图表。如果工作簿中的所有工作表都需要生成图表,您可以遍历这些工作表并添加一个图表,如下所示:
Sub Gendergraph()
'
' Gendergraph Macro
'
Dim ws as Worksheet
For Each ws in Thisworkbook.Worksheets
ws.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "='" & ws.Name & "'!$B$2"
ActiveChart.SeriesCollection(1).Values = _
"='" & ws.Name & "'!$D$3:$D$6,'" & ws.Name & "'!$D$10:$D$12"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Name = "='" & ws.Name & "'!$E$2"
ActiveChart.SeriesCollection(2).Values = _
"='" & ws.Name & "'!$G$3:$G$6,'" & ws.Name & "'!$G$10:$G$12"
ActiveChart.SeriesCollection(2).XValues = _
"='" & ws.Name & "'!$B$3:$B$6,'" & ws.Name & "'!$B$10:$B$12"
Next ws
End Sub
到目前为止你试过什么?每张工作表上图表的数据范围是否相同?Hi Gareth-每张工作表的数据范围是否相同。尝试删除“'2002-CJS'!”认为这可能与此和/或“活动图表”在线条上…?图表应该都在一张纸上还是在有数据的纸上?必须是这样一个noob-根本无法运行您的任何建议!打开VBA编辑器,插入模块,粘贴代码。宏未出现在列表中,因此我无法运行它!将它添加到标准模块,而不是工作表或工作簿。Gareth,让它工作起来!这确实为每个工作表创建了一个图表。然而,它将它们堆叠在一张工作表中。是否值得考虑调整此代码以便将每个图表放入正确的工作表中?抱歉,代码中缺少了需要更改为
ws
的ActiveSheet
。我已经更新了我的答案。第10行(xlcolumnclustered Line)错误状态:对象变量或块变量未设置。我已尝试使其正常工作-它不会在括号中的文本中运行,如果使用“Dim ws As Worksheet”,则第3行出现错误91(使用ws…)