Vba 运行时错误';438';在一张工作表的每个图表中循环
我使用宏遍历工作表的每个图表,以隐藏任何带有#N/a值/标题的数据标签(我在图表中使用两个系列,一个绿色,一个红色,取决于目标) 当我运行这个子对象时,我得到了这样的信息:“运行时错误'438':对象不支持这个属性或方法 发生这种情况的代码行是:Vba 运行时错误';438';在一张工作表的每个图表中循环,vba,excel,Vba,Excel,我使用宏遍历工作表的每个图表,以隐藏任何带有#N/a值/标题的数据标签(我在图表中使用两个系列,一个绿色,一个红色,取决于目标) 当我运行这个子对象时,我得到了这样的信息:“运行时错误'438':对象不支持这个属性或方法 发生这种情况的代码行是: 对于l=1到.SeriesCollection(k).Points(j).DataLabels.Count 我一直在研究这个问题的许多其他问题/答案,但当涉及到这种错误时,每个案例似乎都有所不同 是否有人对VBA有更好的理解,可以指出问题所在 S
对于l=1到.SeriesCollection(k).Points(j).DataLabels.Count
我一直在研究这个问题的许多其他问题/答案,但当涉及到这种错误时,每个案例似乎都有所不同
是否有人对VBA有更好的理解,可以指出问题所在
Sub LoopThroughCharts()
'PURPOSE: Loop through every graph in the a selected worksheet
Dim sht As Worksheet
Dim CurrentSheet As Worksheet
Dim cht As ChartObject
Application.ScreenUpdating = False
Application.EnableEvents = False
Set CurrentSheet = ActiveSheet
With ActiveWorkbook.Worksheets("Graph Annuel")
For Each cht In .ChartObjects
cht.Activate
With ActiveChart
For k = 1 To .SeriesCollection.Count
For j = 1 To .SeriesCollection(k).Points.Count
For l = 1 To .SeriesCollection(k).Points(j).DataLabels.Count
If .SeriesCollection.Points(j).DataLabels.Item(l).Caption = "#N/A" Then
.SeriesCollection.Points(j).DataLabels.Item(l).Delete
End If
Next l
Next j
Next k
End With
Next cht
End With
CurrentSheet.Activate
Application.EnableEvents = True
End Sub
由于点
对象没有数据标签
属性,因此无法迭代点(j).DataLabels
尝试以下操作(修改为不删除标题,只使用空字符串):
尝试从集合中删除,您将遇到错误,除非您在反向索引中执行此操作(这是可能的,但在这种情况下,当您可以只使用空字符串时,这不是必需的)
还添加了一些逻辑,以确保在数据标签已被删除时不会出错(即,srs.HasDataLabel
可能为True
,而对于序列中的单个点
,它可能为False
。我不确定,但我打赌是单点对象(例如,Points(j)
没有DataLabels
集合。请简单地尝试.SeriesCollection(j).DataLabels.Count
?我将在明天的工作中首先尝试!谢谢先生:)
Dim cObj As ChartObject, cht As Chart, srs As Series, p As Integer
For Each cObj In ActiveSheet.ChartObjects
Set cht = cObj.Chart
With cht
For Each srs In .SeriesCollection
If srs.HasDataLabels Then
For p = 1 To srs.Points.Count
If srs.Points(p).HasDataLabel Then
If srs.DataLabels.Item(p).Caption = "#N/A" Then
srs.DataLabels.Item(p).Caption = ""
End If
End If
Next
End If
Next
End With
Next