2012-08-02 44 views
0

我有我希望的是一个相对简单的请求。使用If函数以VBA代码格式化图表

我正在研究一个宏,它会自动格式化我创建的大量图表。但是,我有一个问题,因为每个图表所包含的系列数量都有很大差异。

如果我尝试在只有四个系列的图表上运行我当前的代码,例如,它在到达下面的代码时发生错误,之后无法处理代码,因为它期望第五个系列进行格式化。我相信我需要实现代码 - “如果图表有第五个系列,那么应用宏的下一行”。

下面的代码是我用来格式化每个系列的代码。这应如何包含在如上所述的if语句中?

ActiveChart.LegEND.Select 
ActiveChart.LegEND.LegendEntries(5).Select 
ActiveChart.SeriesCollection(5).Select 
With Selection.Format.Line 
    .Visible = msoTrue 
    .Weight = 1.5 
End With 

回答

2

可以使用SeriesCollection集合(documentation)的Count成员,这将返回在图表中系列的数量。你可以使用类似:

ActiveChart.LegEND.Select 

If ActiveChart.SeriesCollection.Count = 5 Then 

    ActiveChart.LegEND.LegendEntries(5).Select 
    ActiveChart.SeriesCollection(5).Select 
    With Selection.Format.Line 
     .Visible = msoTrue 
     .Weight = 1.5 
    End With 
End If 

这只会工作,如果你恰好有5个系列,如果你有更多的则Count评价说,6,上述格式将不适用。

可以稍微改变。如果语句如下:

If ActiveChart.SeriesCollection.Count >= 5 Then 

    ActiveChart.LegEND.LegendEntries(5).Select 
    ActiveChart.SeriesCollection(5).Select 
    With Selection.Format.Line 
     .Visible = msoTrue 
     .Weight = 1.5 
    End With 

End If 

您可以再重复此块在你的代码为> = 6,它应该工作。在一个侧面说明中,这可能不是对代码进行编码的最有效方式,因为您正在重复代码块,但这不是这个问题的关键。

+0

谢谢。这几乎是我的想法。但是,如果我将这个计数函数应用于每个系列的格式代码,并且例如有20个系列,则格式不适用于除第20系列之外的任何系列。 因为,当然,任何有20的图也会有1,2,3,4等等。 我认为这段代码几乎是我需要的。 – 2012-08-02 09:35:00

+0

我明白你的观点,我更新了答案。 – 2012-08-02 09:48:04

+0

现在全部排序,非常感谢您的回答。 – 2012-08-02 15:16:47