2011-08-04 88 views
0

我正在爲一個Excel編程一個Makro xy-Diagramm 圖表幾乎是正確的,但我有dublicate DataSeriesNames; 我已經試過通過所有系列和比較名稱。 沒有錯誤,但沒有奏效。VBA中的Excel Diagramm系列名稱

代碼是這樣的:

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 

廠家批號羅賓

回答

1

有幾件事錯在這裏。

首先,你總是看着同一系列!我想你想在If聲明中用a代替Count

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是一個可怕的變數名稱...所以是Count啊!我認爲你的代碼應該是這樣的:

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 
+0

謝謝你的答案。我糾正了這個問題。它仍然不起作用。變量Name始終爲真..即使名稱不存在。我不知道爲什麼。 – MrPropper

+0

布爾值和假我的東西。我的錯誤是,我沒有使用ActiveChart.SeriesCollection.Count ..現在它的工作。 thx非常多=) – MrPropper