通过所有打开的工作表运行脚本

时间:2016-11-15 20:02:28

标签: excel-vba loops charts vba excel

我已经浏览了excel书中所有打开的工作表中的另外4个循环,所有这些都在stackoverflow上进行了搜索。我对VBA很新,所以我很难理解如何将这些答案操作到我的代码中。

我想要做的是在每个活动工作表中创建一个图表。下面是我在Sheet 1中创建图表的代码(从另一篇文章中找到并将参数更改为我需要的参数)。它创建了我想要的图表。我不知道如何在代码中引用当前工作表而不是工作表1,所以我知道这是我的第一个障碍。我确实找到了如何循环https://support.microsoft.com/en-us/kb/142126但它只运行Sheet 1,因为我不知道如何正确更改该参数。

Sub chartcreation()
    Dim sh As Worksheet
    Dim chrt As Chart

    Set sh = ActiveWorkbook.Worksheets("Sheet1")
    Set chrt = sh.Shapes.AddChart.Chart

    With chrt
        'Data?
        .ChartType = xlXYScatterSmooth
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Name = "=Sheet1!B1"
        .SeriesCollection(1).XValues = "=Sheet1!$A$3:$A$630"
        .SeriesCollection(1).Values = "=Sheet1!$B$3:$B$630"

        'Titles
        .HasTitle = True
        .ChartTitle.Text = "=Sheet1!B1"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Range("A2")
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Range("B2")

        'Formatting
        .Axes(xlCategory).HasMinorGridlines = False
        .Axes(xlValue).HasMajorGridlines = True
        .Axes(xlCategory).MinimumScale = 15
        .Axes(xlCategory).MaximumScale = 90
        .Axes(xlValue).HasMinorGridlines = False
        .Axes(xlValue).MinimumScale = 0
        .Axes(xlValue).MaximumScale = 60
        .HasLegend = True

    End With



End Sub

2 个答案:

答案 0 :(得分:1)

您的代码设置得很好,只需要进行一些更改。首先遍历ActiveWorkbook中的所有工作表,然后更改值以引用工作表变量。

Sub chartcreation()
    Dim sh As Worksheet
    Dim chrt As Chart

    For Each sh In ActiveWorkbook.Worksheets
        Set chrt = sh.Shapes.AddChart.Chart

        With chrt
            'Data?
            .ChartType = xlXYScatterSmooth
            .SeriesCollection.NewSeries
            .SeriesCollection(1).Name = sh.Range("B1").Value
            .SeriesCollection(1).XValues = sh.Range("$A$3:$A$630")
            .SeriesCollection(1).Values = sh.Range("$B$3:$B$630")

            'Titles
            .HasTitle = True
            .ChartTitle.Text = sh.Range("B1").Value
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = sh.Range("A2")
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = sh.Range("B2")

            'Formatting
            .Axes(xlCategory).HasMinorGridlines = False
            .Axes(xlValue).HasMajorGridlines = True
            .Axes(xlCategory).MinimumScale = 15
            .Axes(xlCategory).MaximumScale = 90
            .Axes(xlValue).HasMinorGridlines = False
            .Axes(xlValue).MinimumScale = 0
            .Axes(xlValue).MaximumScale = 60
            .HasLegend = True
        End With
    Next
End Sub

<强>测试

enter image description here

答案 1 :(得分:0)

您可以使用

遍历表格
Sheets("Sheetname").Select

在那里你可以把工作表的名字放进砖头里。 或者您可以使用它:

WS_Count = ActiveWorkbook.Worksheets.Count

这将为您提供工作簿的数量。并选择。您可以选择一个接一个