工作表/范围数组循环制作图表

时间:2013-09-18 13:16:14

标签: arrays excel excel-vba plot vba

除了道歉,我的问题变得非常好奇,我找不到任何答案。

我的程序的一部分旨在搜索图形以查看系列是否已经存在,如果不存在,则会创建它。截至目前,该计划很好,花花公子。但是,对于8个不同的图表,代码不仅很长,而且可能效率更低。所以,我决定尝试循环一个数组。这就是其中一个图形块的样子:

编辑:我没有特别说,但是Z是一个工作表的名称和系列的名称,如前面代码中所定义的那样,所以这不是问题。

Sheets("A").Select
Count = ActiveChart.SeriesCollection.Count
Fail = 0
For c = 1 To Count
If ActiveChart.SeriesCollection(c).Name = Z Then
    With ActiveChart.SeriesCollection(c)
        .Values = Worksheets(Z).Range("AJ5:AJ45")
        .XValues = Worksheets(Z).Range("AP5:AP45")
    End With
    Exit For
    Fail = Fail - 1
End If
Fail = Fail + 1
Next c
If Fail = Count Then
ActiveChart.SeriesCollection.NewSeries
c = ActiveChart.SeriesCollection.Count
With ActiveChart.SeriesCollection(c)
    .Values = Worksheets(Z).Range("AJ5:AJ45")
    .XValues = Worksheets(Z).Range("AP5:AP45")
    .Name = Z
    .MarkerStyle = 1
    .MarkerSize = 9
End With
End If

(还有7个以下,有不同的纸张和Y值)。所以,我试过这个:

Dim SheetArr(0 To 7) As Sheets
Set SheetArr(0) = Sheets("A")
Set SheetArr(1) = Sheets("B")

等。

Dim RangeArr(0 To 7) As Range
Set RangeArr(0) = Range("AJ5:AJ45")
Set RangeArr(1) = Range("AK5:AK45")

等。

开始循环,分别用SheetArr(i)和RangeArr(i)替换单个值,因此只存在一个代码块,但是没有一个图形甚至开始绘制。 我调整阵列是否错误,或者这是不可能的?

(很抱歉超级长的帖子,只是想尽可能清楚。)

1 个答案:

答案 0 :(得分:1)

您可以创建包含工作表名称的字符串数组,而不是尝试创建工作表数组。

Dim SheetNames(0 To 7) As String
SheetNames(0) = "A"
SheetNames(1) = "B"
...

然后像这样使用它

For IntSheet = 0 To 7
    ThisWorkbook.Sheets(SheetNames(IntSheet)).Select
    ...
Next

关于范围的地址评论:

我逐步完成了以下代码,测试了范围分配并选择了适当的范围

Dim RangeArr(0 To 7) As Range
Set RangeArr(0) = Range("AJ5:AJ45")
Set RangeArr(1) = Range("AK5:AK45")
RangeArr(0).Select   'Selects AJ5:AJ45
RangeArr(1).Select   'Selects AK5:AK45