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