2016-11-15 22 views
1

我已經通過其他循環查看了所有在Excel中打開的工作表,發現在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 
+0

什麼是你的每一個定義的活動工作?一次只能有1個活動工作表。 – Niclas

+0

你有Sheet1中的數據嗎? – Niclas

+0

對不起,我不清楚。我將在一個文件中放置384張表格,我想循環播放。因此,每張工作表都包含我想從中創建圖表的列A和B中的數據。如果我將腳本更改爲每個圖紙編號,我知道這會起作用,但我想知道是否循環會更簡單,因此我沒有上述腳本的384份副本。 – CorBoy

回答

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

使用'sh.Range(「B1」)。Value將根據創建圖表時單元格中的內容將這些值設置爲靜態值。您需要將它們寫成公式,例如'... =「='」&sh.Name&「'!B1」'爲了保留現有的功能。 – YowE3K

+0

非常感謝你!它效果很好。 – CorBoy

0

您可以通過Sheets循環利用

Sheets("Sheetname").Select 

那裏你可以把紙張到brickets的名稱。 或者您可以使用此:

WS_Count = ActiveWorkbook.Worksheets.Count 

這給你的工作簿的數字出來。並通過。選擇您可以選擇一個接一個

+3

這是一個循環嗎? – Niclas