2016-12-06 1 views
0

Der folgende Code ist zum Erstellen eines Diagramms in jedem Arbeitsblatt in einer Arbeitsmappe. Ich fand diesen Code online und änderte ihn für das, was ich brauchte. Ich bin ein Anfänger bei VBA und bin nicht sicher, wie man Codes mit "mit" Aussagen manipuliert. Dieser Code funktionierte großartig, bis ich die Information in Zelle B1, meinem Diagrammtitel, änderte. Seitdem hat mein Code 2 Serien erstellt. Serie 2 wird nicht in der Grafik gezeichnet, sondern in der Legende angezeigt. Wenn ich auf das Diagramm klicke, um die Daten zu sehen, die es sammelt, füllt es sich nicht, bitte sehen Sie imgur Link, [1]: https://i.stack.imgur.com/n1jPc.jpg, für die Visualisierung. Wenn ich die Serie, die ich behalten möchte, sehe, zeigt sie A3: A630 und B3: B630.Ausblenden von Serien im Diagramm in Excel VBA

Wie kann ich diese Serie 2 löschen? Außerdem habe ich Text in A1 eingegeben und Serie 3 erstellt. Ich möchte sicherstellen, dass nur Serie 1 in meinem Diagramm sichtbar ist.

Ich habe bereits versucht, das Makro für das Löschen der Serie und die Verwendung in meinem Code, aber ich kann immer erhalten, kann nicht wegen der Code-Unterbrechung fortgesetzt werden. Das aufgezeichnete Makro gab ActiveSheet.ChartObjects („Chart 1“). Aktivieren Sie ActiveChart.FullSeriesCollection (2) .Delete

Ich habe auch einen Weg zu verstecken die Serie gefunden, aber noch einmal, wenn ich stecken Sie ihn nach meinem. SeriesCollection Block es gibt den Fehler "Code einbrechen". Selection.Format.Line.Visible = msoFalse

Originalcode für die Erstellung von Charts

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

Wenn die zwei oben genannten Optionen für den Code zu modifizieren völlig falsch sind, ich folgendes gefunden haben Code, der jedes Diagramm auf jedem Arbeitsblatt durchläuft und die Reihe löscht, aber ich kann nicht herausfinden, wie ich es für meine Bedürfnisse modifiziere. Private Sub Workbook_Open()

Dim Sht As Worksheet 
    Dim ShtName As String 
    Dim R As Range 
    Dim ASht As Worksheet 

    Set R = ActiveCell  'Save the activecell 
    Set ASht = ActiveSheet 'Save the activesheet 

    Application.ScreenUpdating = False 

    For Each Sht In ActiveWorkbook.Sheets 
    ShtName = Sht.Name 
    Select Case ShtName 
     Case "One", "Two", "Three"   'Charts are on multiple sheets 
     Call DeleteLegendEntries(Sht) 
    End Select 
    Next Sht 

    ASht.Activate        'Back to original sheet 
    R.Activate         'Back to original cell 
    Application.ScreenUpdating = True 

End Sub 

Wieder einmal würde Ich mag alle Serien außer Reihe 1 verstecken oder zu löschen, die ich umbenannt, in einer Arbeitsmappe in jedem Arbeitsblatt. Vielen Dank im Voraus für Ihre Hilfe.

Antwort

1

Ich fand es mit mehr Forschung und Hilfe von einer IT-Person bei der Arbeit.

Ich habe im folgenden Code vor der mit Diagramm-Anweisung hinzugefügt. (Gefunden von Jon Peltier)

Do Until chrt.SeriesCollection.Count = 0 
chrt.SeriesCollection(1).Delete 
Loop 

Der gesamte Code sieht aus wie

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


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

Do Until chrt.SeriesCollection.Count = 0 
chrt.SeriesCollection(1).Delete 
Loop 

    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

Verwandte Themen