搜索第二条水平轴时,忽略“ On Error GoTo”

时间:2019-05-05 15:13:08

标签: excel vba

注意:下面的代码实际上有效!关于我遇到的问题的原因,请参阅我自己的答案。我决定将代码留在这里,因为我看到了有关如何删除第二条水平轴的其他问题。

初始问题/问题:我正在格式化一系列带有多个图表的电子表格。应用选定的图表样式时(我使用样式209-代码行为“ ActiveChart.ChartStyle = 209),某些图表返回两个水平轴,而我不希望这样做(某些图表具有两个垂直轴-但是没关系),而不是逐个图表并手动删除每个辅助水平轴,我在格式化子例程中包含了一段代码。该代码在大多数情况下都有效,但有时会出现以下错误:

VB error image

我的印象是“ On Error GoTo”被“忽略”。即当我到达“ ActiveChart.SetElement ...”行时,会发生上述错误,因为图表没有辅助轴。这意味着我要求辅助轴的最大比例的行(即“ chart_axis = ...”)必须返回错误(因为辅助轴不存在)。这意味着“出错时转到”将被忽略(或没有跳到“ No_second_axis”)。

这是我正在使用的代码部分,它将删除第二条轴(如果存在):

    Dim s_name As String
    Dim chart_axis As Variant

    For Each Shape In ActiveSheet.Shapes
        s_name = Shape.Name
        If Shape.Type = msoChart Then
            ActiveSheet.ChartObjects(s_name).Activate
            On Error GoTo No_second_axis
    'Try to get the "scale" of secondary horizontal axis - error if non-existent                
    chart_axis = ActiveChart.Axes(xlValue, xlSecondary).MaximumScale
         'If it reached this line, there was no error when getting the second horizontal axis scale (i.e., the second horizontal axis exists. No I can delete it!
         With ActiveChart
            ActiveChart.SetElement (msoElementSecondaryCategoryAxisNone)
         End With
    No_second_axis:
        End If
    Next Shape

    End Sub

我想念什么吗?为什么“出现错误时转到”有时似乎起作用,但对某些图表却不起作用?我无法找到适用于哪种图表类型与无法使用图表类型的“模式”。

2 个答案:

答案 0 :(得分:2)

经过两个多小时的努力,我决定在运行潜水艇之前检查每个图表。使用Excel上的“转到”(快捷键= F5)并选择“对象”,我可以遍历每个对象(按TAB键)。我意识到我有一些“隐藏”图表(即,非常老的图表以某种方式被最小化/折叠到电子表格中一个晦涩的地方)。这些图表上没有“系列”。由于某种原因,上面的代码的“ chart_axis = ...”部分可以读取辅助水平轴刻度,但是该轴实际上不存在(因为在尝试删除该轴时出现错误)。也许这是Excel上的错误,或者有逻辑上的解释-但这超出了我现在的需要。我决定回答自己的问题,以防该示例对其他人有所帮助。

答案 1 :(得分:1)

您遇到的错误是Office的一般错误,表明某些错误可能在后台发生。

要尝试避免此错误,请尝试以下操作:

在函数的开头使用Application.ScreenUpdating=false(然后在结尾使用Application.ScreenUpdating=true)。这有助于我避免在更新Office文档中的大量对象/形状时出现渲染问题。

OR

在Shape对象循环的每次迭代的开始使用Application.ScreenUpdating=false,然后在更新Application.ScreenUpdating=true后使用。{p>

希望您能够发现哪些图表会造成问题以及在哪种情况下(或状态)。