Тип контрольной диаграммы Excel VBA на SeriesCollection - PullRequest
1 голос
/ 14 июля 2020

Мне нужно изменить масштаб оси Y моих диаграмм на листе Excel. Масштаб должен быть скорректирован в соответствии со значениями внутри каждой диаграммы.

В Интернете я нашел следующий код:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cht As ChartObject
Dim srs As Series
Dim FirstTime  As Boolean
Dim MaxNumber As Double
Dim MinNumber As Double
Dim MaxChartNumber As Long
Dim MinChartNumber As Long
Dim Padding As Double

'Input Padding on Top of Min/Max Numbers (Percentage)
  Padding = 5  'Number between 0-1

'Optimize Code
  Application.ScreenUpdating = False
  
'Loop Through Each Chart On ActiveSheet
  For Each cht In ActiveSheet.ChartObjects
    
    'First Time Looking at This Chart?
      FirstTime = True
      
    'Determine Chart's Overall Max/Min From Connected Data Source
      For Each srs In cht.Chart.SeriesCollection
        'Determine Maximum value in Series
          MaxNumber = Application.WorksheetFunction.max(srs.Values)
        
        'Store value if currently the overall Maximum Value
          If FirstTime = True Then
            MaxChartNumber = MaxNumber
          ElseIf MaxNumber > MaxChartNumber Then
            MaxChartNumber = MaxNumber
          End If
        
        'Determine Minimum value in Series (exclude zeroes)
          MinNumber = Application.WorksheetFunction.min(srs.Values)
          
        'Store value if currently the overall Minimum Value
          If FirstTime = True Then
            MinChartNumber = MinNumber
          ElseIf MinNumber < MinChartNumber Or MinChartNumber = 0 Then
            MinChartNumber = MinNumber
          End If
        
        'First Time Looking at This Chart?
          FirstTime = False
      Next srs
      
    'Rescale Y-Axis
      cht.Chart.Axes(xlValue).MinimumScale = MinChartNumber - Padding + 1
      cht.Chart.Axes(xlValue).MaximumScale = MaxChartNumber + Padding + 1
  
  Next cht

'Optimize Code
  Application.ScreenUpdating = True
End Sub

Он делает то, что я хочу. Теперь мне просто нужен код, чтобы взять только серию линий Chart.SeriesCollection.

Сначала я подумал о том, чтобы проверить тип диаграммы на соответствие линейной диаграмме (не знал, как это сделать), но это бы возможно игнорировать комбо-диаграммы. У меня есть комбинированная диаграмма в моем Excel, которая состоит из 3x серий «100% Stacked Column» (они отмечены вторичной осью) и 2x серий «Line». В этом случае мне нужно будет посмотреть только на серию из двух строк.

Возвращает ли Chart.SeriesCollection.ChartType соответствующий тип, как указано выше? И если да, то как проверить только "Строку"?

1 Ответ

1 голос
/ 20 июля 2020

Значит вам нужно что-то вроде этого:

For Each srs In cht.Chart.SeriesCollection
    If srs.ChartType = xlLine Then

        ' do your stuff

    End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...