Имена диаграмм Excel в VBA - PullRequest
       31

Имена диаграмм Excel в VBA

0 голосов
/ 04 августа 2011

Я программирую Макро для Excel xy-Diagramm Диаграмма почти правильная, но у меня есть дубликат 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

Mfg Robin

1 Ответ

1 голос
/ 04 августа 2011

Здесь есть пара неправильных вещей.

Прежде всего, вы всегда смотрите одну и ту же серию!Я думаю, что вы хотите заменить Count на a в вашем If утверждении.

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 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
...