1

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

我的程序的一部分旨在搜索图表以查看一个系列是否已经存在,如果不存在,它会创建它。到目前为止,该程序很好而且花花公子。然而,在对 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")

ETC..

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

ETC..

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

(抱歉发了一个超长的帖子,只是想尽可能清楚。)

4

1 回答 1

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
于 2013-09-18T13:58:40.140 回答