1) 请运行以下代码。
Public Sub Macro1()
'Delete all charts
For i = ActiveSheet.Shapes.Count To 1 Step -1
If ActiveSheet.Shapes(i).Type = msoChart Then
ActiveSheet.Shapes(i).Delete
End If
Next i
'Add a chart.
With ActiveSheet.ChartObjects.Add(Left:=10, Top:=10, Width:=500, Height:=300)
.Chart.Axes(xlCategory).TickLabels.Font.Size = 40
End With
'Add a serie.
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection.NewSeries
.ChartType = xlLine
.XValues = Array(1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 20000)
.Values = Array(150, 200, 800, 1200, 900, 600, 900, 850, 1500, 1600, 1900, 1700, 600, 500, 450, 300, 500, 750, 900, 850)
End With
'Print all XValues
For Each i In ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).XValues
Debug.Print i
Next
'The following code is doing same task comparing to above code.
'For Each i In ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory).CategoryNames
'Debug.Print i
'Next
'The following code needs to be repaired.
'For Each i In ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).XValues
'If i Is Visible Then
'Debug.Print i
'End If
'Next
End Sub
2)运行上面的代码后,检查你的Excel表格中是否有以下图表。
3)这是我的问题:
如何通过vba代码只获取Excel图表的可见类别标签?
请注意,可见的类别名称为 1000、4000、7000、10000、13000、16000、19000,如上表所示。
4)这是我的脚注:
请注意,我正在寻找动态解决方案。因为可见的类别标签是可变的。
可见类别名称可以是 1000、4000、7000、10000、13000、16000、19000。
或者可能是
1000、3000、5000、7000、9000、11000、13000、15000、17000、19000
或者可能是
1000、5000、9000、13000、17000、20000
或者可能是
其他可能性。
轴上的可见标签是 TickLabels。 它们之间的间距在
Axis.TickLabelSpacing
下指定(如果您强制将其设置为特定值,则可以使用 Axis.TickLabelSpacingIsAuto
将其重置为自动)
所以,如果
Axis.TickLabelSpacing=3
,那么你只想输出每三个CategoryName
:1000,2000,3000,4000,5000,6000,7000,等等
您可以通过使用增量变量来告诉您是否应该保留或忽略它来做到这一点:
Dim ToShow AS Long: ToShow = 0
For Each j In Sheet1.ChartObjects(1).Chart.Axes(xlCategory).CategoryNames
If ToShow =0 Then Debug.Print j
ToShow = ToShow+1 mod Sheet1.ChartObjects(1).Chart.Axes(xlCategory).TickLabelSpacing
Next
或者你可以使用
Step
ped 循环:
Dim NameList() AS Variant, CurrentName As Long
NameList = Sheet1.ChartObjects(1).Chart.Axes(xlCategory).CategoryNames
For CurrentName = LBound(NameList) To UBound(NameList) Step Sheet1.ChartObjects(1).Chart.Axes(xlCategory).TickLabelSpacing
Debug.Print NameList(CurrentName)
Next
Axis.Crosses
作为偏移量