2016-11-15 4 views
1

Ich habe durch 4 andere Schleife durch alle offenen Blätter in einem Excel-Buch, alle gefunden Suche auf Stackoverflow. Ich bin sehr neu in VBA, daher habe ich Schwierigkeiten zu verstehen, wie ich diese Antworten in meinen Code einfüge.laufendes Skript durch alle offenen Arbeitsblätter

Was ich tun möchte, ist ein Diagramm in jedem aktiven Arbeitsblatt erstellen. Unten ist mein Code zum Erstellen eines Diagramms in Blatt 1 (gefunden von einem anderen Beitrag und Parameter geändert, was ich brauchte). Es erstellt das Diagramm genau wie ich es möchte. Ich weiß nicht, wie ich das aktuelle Blatt in meinem Code anstelle von Blatt 1 referenzieren soll, also weiß ich, dass das meine erste Hürde ist. Ich habe gefunden, wie man auf https://support.microsoft.com/en-us/kb/142126 schlingen kann, aber es läuft nur für Blatt 1, da ich nicht weiß, wie man diesen Parameter richtig ändert.

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

Was ist ein aktives Arbeitsblatt pro Ihre Definition? Sie können jeweils nur 1 aktives Arbeitsblatt haben. – Niclas

+0

Und haben Sie Ihre Daten in Sheet1? – Niclas

+0

Sorry, dass ich nicht klar bin. Ich werde 384 Blätter in einer Datei haben, die ich durchschleifen möchte. Jedes Blatt enthält also die Daten in den Spalten A und B, aus denen ich ein Diagramm erstellen möchte. Wenn ich mein Skript zu jeder Blattnummer ändere, weiß ich, dass das funktionieren würde, aber ich frage mich, ob eine Schleife einfacher wäre, also habe ich die 384 Kopien des obigen Skripts nicht. – CorBoy

Antwort

1

Ihr Code ist ziemlich gut eingerichtet und erfordert nur wenige Änderungen. Durchlaufen Sie zunächst alle Arbeitsblätter in ActiveWorkbook und ändern Sie dann die Werte so, dass sie auf die Blattvariable verweisen.

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 

Geprüft

enter image description here

+1

Mit 'sh.Range (" B1 "). Value" wird diese Werte statisch machen, basierend auf dem, was in der Zelle zum Zeitpunkt der Erstellung des Diagramms war. Sie müssen diese als Formeln schreiben, z.B. '... =" = '"& sh.Name &"'! B1 "' um die bestehende Funktionalität zu erhalten. – YowE3K

+0

Vielen Dank !! Es funktioniert großartig. – CorBoy

0

können Sie eine Schleife durch die Blätter von

Sheets("Sheetname").Select 

dort verwenden, können Sie nur den Namen des Blattes in die Briketts setzen. Oder Sie verwenden:

WS_Count = ActiveWorkbook.Worksheets.Count 

dies die Anzahl der Arbeitsmappen heraus gibt. und durch .Wählen Sie nacheinander aus

+3

Wie ist das eine Schleife? – Niclas

Verwandte Themen