2016-12-06 10 views
0

以下は、ワークブックの各ワークシートにチャートを作成するためのコードです。私はこのコードをオンラインで見つけ、必要なものを修正しました。私はVBAの初心者であり、 "with"ステートメントでコードを操作する方法がわかりません。このコードは、チャートのタイトルであるB1セルにある情報を変更するまで有効でした。それ以来、私のコードは2つのシリーズを作成しています。シリーズ2はグラフにプロットされていませんが、凡例に表示されます。グラフをクリックして収集しているデータを表示すると、そのデータは表示されません。imgur link [1]:https://i.stack.imgur.com/n1jPc.jpgを参照してください。私が見たいシリーズを見ると、A630とB3:B630が表示されます。グラフのシリーズを非表示VBA

このシリーズ2を削除するにはどうすればよいですか?また、A1にテキストを入力してシリーズ3を作成しました。シリーズ1のみが自分のチャートに表示されていることを確認します。

私は既にシリーズを削除し、自分のコードでそれを使用するためのマクロを記録しようとしましたが、コード内でブレークしているため、常に受信できません。記録したマクロは、私はまた、シリーズを隠す方法を発見した ActiveChart.FullSeriesCollection(2).Delete

を有効にします。 ActiveSheet.ChartObjects(「表1」)を与えたが、再び私は私の後にそれを挿入したとき。 SeriesCollectionブロック「コード内にブレーク」エラーを表示します。 Selection.Format.Line.Visible = msoFalse

オリジナルコードチャート

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の

を作成するためのコードを変更するオプションが上記の2は完全に間違っている場合は、私は次のことを見つけました各ワークシートの各チャートを通過してシリーズを削除するコードですが、私のニーズに合わせて変更する方法はわかりません。 プライベートサブの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 

はもう一度、私は非表示にしたり、私は1つのワークブック内の各ワークシートで、名前を変更したシリーズ1、シリーズを除くすべてを削除したいと思います。ご協力いただきありがとうございます。

答えて

1

職場のIT担当者から多くの調査と助けを得てわかりました。

with chartステートメントの前に次のコードで追加しました。 (ジョン・ペルティエから発見)

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

全体のコードは

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の

のように見えます
関連する問題