0

我正在为 Excel xy-Diagramm 编写 Makro 图表几乎是正确的,但我复制了 DataSeriesNames;我已经尝试过所有系列并比较名称。没有错误,但它不起作用。

代码是这样的:

For a=1 to Count
  If ActiveChart.SeriesCollection(Count).Name = Range("A2").Value Then
    Name = true
  End If
  a = a + 1
Next

If Name = false Then
  ActiveChart.SeriesCollection.NewSeries
End If
ActiveChart.SeriesCollection(Count).Name = "='Tasks'!$D$" & i
ActiveChart.SeriesCollection(Count).XValues = "='Tasks'!$B$" & i
ActiveChart.SeriesCollection(Count).Values = "='Tasks'!$C$" & i

制造罗宾

4

1 回答 1

1

这里有几件事是错误的。

首先,你总是在看同一个系列!我想你想在你的陈述中替换Count为。aIf

If ActiveChart.SeriesCollection(a).Name

其次,一旦纠正了这一点,即使您的Name变量True在某个时候设置为,它也可能会在循环继续迭代系列集合的其余部分时重置为False稍后。For...Next为了防止这种情况,添加Exit For这样的:

For a = 1 To Count
  If ActiveChart.SeriesCollection(a).Name = Range("A2").Value Then
    Name = True
    Exit For
  End If
  a = a + 1
Next

另外,我怀疑你没有声明Name为布尔变量,所以默认情况下它是一个 Variant 所以它的值不是False开始的!你应该在你的过程的顶部声明变量Dim Name as Boolean,然后如果你想Name默认False,你应该明确地说:放在Name = False循环之前。此外,Name这是一个可怕的变量名称...... CountArgh 也是如此!我认为您的代码应如下所示:

Option Explicit

Sub MySub()
    Dim a As Long
    Dim NameExists As Boolean
    Dim SeriesCount As Long

    SeriesCount = ActiveChart.SeriesCollection.Count

    NameExists = False
    For a = 1 To SeriesCount 
      If ActiveChart.SeriesCollection(a).Name = Range("A2").Value Then
          NameExists = True
          Exit For
      End If
      a = a + 1
    Next

    If NameExists = False Then
    ' Rest of your code goes here...

End Sub
于 2011-08-04T10:34:13.087 回答