2011-08-04 8 views
0

私はExcel xy-Diagramm用のMakroをプログラミングしています 図はほぼ正しいですが、私はDataSeriesNamesを公開しています。 私はすでにすべてのシリーズを通過し、名前を比較しようとしました。 エラーはありませんでしたが、動作しませんでした。ExcelダイアグラムVBAのシリーズ名

コードは、そのようなものだった:

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ステートメントでCountaと置き換えたいと思います。それが修正されると

If ActiveChart.SeriesCollection(a).Name 

第二に、あなたのName変数がいくつかの点でTrueに設定されます場合でも、それはFor...Nextループはシリーズコレクションの残りの部分を反復継続して後でFalseにリセットされることがあります。これを防ぐために、このようExit Forを追加します。その値がで開始するFalseではありませんので、それはバリアントのデフォルトでもそう

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を宣言していない疑いがあります!プロシージャの上部にある変数をDim Name as Booleanと宣言し、デフォルトでNameFalseにする場合は、実際には明示的に明示する必要があります。ループの前にName = Falseを入れます。さらに、Nameは変数のひどい名前です...そしてそうですCount Argh!あなたのコードは次のようになります:

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は名前が存在しない場合でも常にtrueになります。どうしてか分かりません。 – MrPropper

+0

ブール値= falseのものがあった。私の間違いは、私はActiveChart.SeriesCollection.Countを使用しなかったということでした。今は動作します。 thx非常に=) – MrPropper