Excel VBA检查序列集合上的图表类型

Excel VBA检查序列集合上的图表类型,excel,vba,Excel,Vba,我需要在excel工作表中重新缩放图表的Y轴。刻度应根据每个图表内的值进行调整 我在网上找到了以下代码: 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

我需要在excel工作表中重新缩放图表的Y轴。刻度应根据每个图表内的值进行调整

我在网上找到了以下代码:

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
Private子工作表\u更改(ByVal目标作为范围)
作为图表对象的Dim cht
Dim srs As系列
Dim第一次作为布尔值
将MaxNumber设置为双精度
暗淡的米诺数为双倍
Dim MaxChartNumber尽可能长
数字越长越好
双色调暗填充
'在最小/最大数字上方输入填充(百分比)
填充=0-1之间的5'数字
'优化代码
Application.ScreenUpdating=False
'循环浏览ActiveSheet上的每个图表
对于ActiveSheet.ChartObjects中的每个cht
“第一次看这个图表?
第一次=真
'从连接的数据源确定图表的总最大/最小值
对于cht.Chart.SeriesCollection中的每个srs
'确定系列中的最大值
MaxNumber=Application.WorksheetFunction.max(srs.Values)
'如果当前为总最大值,则存储值
如果FirstTime=True,则
MaxChartNumber=MaxNumber
ElseIf MaxNumber>MaxChartNumber然后
MaxChartNumber=MaxNumber
如果结束
'确定系列中的最小值(不包括零)
MinNumber=Application.WorksheetFunction.min(srs.Values)
'如果当前为总最小值,则存储值
如果FirstTime=True,则
MinChartNumber=MinNumber
如果MinNumber
它在做我想做的事。现在,我只需要代码来获取
Chart.SeriesCollection
行序列

起初我想检查图表类型是否等于折线图(我不知道怎么做),但这可能会忽略组合图。我的excel中有一个组合图,它由3个“100%堆叠柱”系列(用次轴标记)和2个“直线”系列组成。在这种情况下,我只需要看两行序列


是否
Chart.SeriesCollection.ChartType
返回上述相应类型?如果是这样的话,我怎么能只检查“行”呢?

所以你需要这样的东西:

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

        ' do your stuff

    End If
Next

事实上我已经有了解决办法。我做了两张支票。如果cht.chart.ChartType=4或cht.chart.ChartType=-4111,则首先检查图表本身
(包括折线图和混合图表)。第二个检查是
如果srs.Type=xlLine,那么
虽然我不知道
srs.Type
srs.ChartType
之间的区别是
。ChartType
似乎可以识别所有可用的图表类型,而
.Type
只能识别部分列表