2016-12-06 6 views
0

Ниже приведен мой код для создания диаграммы на каждом листе в рабочей книге. Я нашел этот код онлайн и изменил его для того, что мне было нужно. Я новичок в VBA и не уверен, как манипулировать кодами с помощью «с» инструкциями. Этот код работал отлично, пока я не изменил информацию, расположенную в ячейке B1, название моей диаграммы. С тех пор мой код создает 2 серии. Серия 2 не построена на графике, но появляется в легенде. Когда я нажимаю на график для просмотра собранных данных, он не заполняется, см. Ссылку imgur, [1]: https://i.stack.imgur.com/n1jPc.jpg, для визуализации. Когда я просматриваю серию, я хочу, чтобы она показывала A3: A630 и B3: B630.Скрытие серии в диаграмме в excel VBA

Как я могу удалить эту серию 2? Кроме того, я ввел текст в A1, и он создал Series 3. Я хочу убедиться, что на моей диаграмме видна только серия 1.

Я уже пробовал записывать макрос для удаления серии и использовать это в своем коде, но я всегда получаю не могу продолжить из-за разрыва кода. Записанный макрос дал ActiveSheet.ChartObjects («Диаграмма 1»). Активируйте ActiveChart.FullSeriesCollection (2) .Delete

Я также нашел способ скрыть серию, но еще раз, когда я вставить его после моей. BlockCollection Block дает ошибку «break in code». 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 выше вариантов изменения коды совершенно неправильно, я нашел следующее код, который проходит через каждую диаграмму на каждом листе и удаляет серию, но я не могу понять, как изменить его для моих нужд. 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 

Еще раз, я хотел бы, чтобы скрыть или удалить все серии, кроме серии 1, которые я переименовал в каждом листе в одной книге. Спасибо заранее за вашу помощь.

ответ

1

Я понял это с большим количеством исследований и помощи от ИТ-персонала на работе.

Я добавил в следующий код перед оператором диаграммы. (Найдено от Jon Пельтье)

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

Смежные вопросы