Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此Excel宏(VBA)更改为在任何工作表上运行?_Vba_Excel_Worksheet - Fatal编程技术网

如何将此Excel宏(VBA)更改为在任何工作表上运行?

如何将此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

我有一个excel,里面有几所学校的表格数据。每所学校都有单独的工作表。以下代码(记录的宏)将生成参考图纸的图表(
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…)