使用(语法)格式化图表图例

时间:2019-05-06 06:09:10

标签: excel vba charts

我有一个宏,该宏通过遍历单独工作表中的复选框来添加和删除(在其自己的工作表中)图表的(过滤器系列)设置数据系列。添加和删​​除它们时,我想先关闭图例再重新打开,以使其自动调整大小。

我认为这只是我使用with语句的语法错误。

我有一个单独的宏,该宏出于不同的目的执行此操作,但是它循环遍历图表工作表并将其视为变量,并且出于某种原因,它在那里工作。

Sub ISurfSeries1Checklist()

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Dim i As Integer
    Dim c As Integer
    For i = 1 To 56
        If ActiveWorkbook.Sheets("Range").Cells(3 + i, 12).Value = True Then
        ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(i).IsFiltered = False

        Else 'ActiveWorkbook.Sheets("Range").Cells(3 + i, 12) = False Then

        ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(i).IsFiltered = True

        End If
    Next i

    For c = 51 To 56 'ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection.Count

    ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(c).Format.Line.Visible = msoTrue
    ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(c).Format.Line.ForeColor.RGB = RGB(255, 0, 0)
    ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection(c).Format.Line.Transparency = 0

    Next c

    ActiveWorkbook.Charts("I. Surf (1)").HasLegend = False
    ActiveWorkbook.Charts("I. Surf (1)").HasLegend = True

    '***Below is where it stops working.***
    With ActiveWorkbook.Charts("I.Surf (1)").Legend
        .Font.Size = 8
        .Border.Weight = xlHairline
        .Border.Color = RGB(89, 89, 89)
        .Interior.Color = RGB(255, 255, 255)
        .Left = Cht_Sht.PlotArea.InsideLeft - Cht_Sht.Axes(xlValue).Format.Line.Weight
        .Top = Cht_Sht.PlotArea.InsideTop
   End With

1 个答案:

答案 0 :(得分:0)

  

运行时错误'9'。下标超出范围
  在With语句上:With ActiveWorkbook.Charts("I.Surf (1)").Legend

这意味着不存在名为"I.Surf (1)"的图表,您可能缺少点和Surf之间的空格。它应该是"I. Surf (1)"

我建议通过变量引用图表,因此您只需使用其名称一次。编码规则1:不要重复自己。

Dim ActChart As Chart
Set ActChart = ActiveWorkbook.Charts("I. Surf (1)")

这可以防止输入错误,如果您需要更改它,则只需将其更改为一个位置:

Sub ISurfSeries1Checklist()
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Dim ActChart As Chart
    Set ActChart = ActiveWorkbook.Charts("I. Surf (1)")

    Dim i As Long
    For i = 1 To 56
        'Note that you can shorten this to:
        ActChart.FullSeriesCollection(i).IsFiltered = Not (ActiveWorkbook.Sheets("Range").Cells(3 + i, 12).Value = True)
    Next i

    Dim c As Long
    For c = 51 To 56 'ActiveWorkbook.Charts("I. Surf (1)").FullSeriesCollection.Count
        With ActChart.FullSeriesCollection(c).Format.Line
            .Visible = msoTrue
            .ForeColor.RGB = RGB(255, 0, 0)
            .Transparency = 0
        End With
    Next c

    ActChart.HasLegend = False
    ActChart.HasLegend = True

    With ActChart.Legend
        .Font.Size = 8
        .Border.Weight = xlHairline
        .Border.Color = RGB(89, 89, 89)
        .Interior.Color = RGB(255, 255, 255)
        .Left = Cht_Sht.PlotArea.InsideLeft - Cht_Sht.Axes(xlValue).Format.Line.Weight
        .Top = Cht_Sht.PlotArea.InsideTop
   End With
End Sub