VBA 与 F8/F5 配合使用,但从按钮/SUB 调用时失败

VBA 与 F8/F5 配合使用,但从按钮/SUB 调用时失败

当我在 Visual Basic 窗口中按 F8/F5 时,下面的基本代码可以工作。当我使用工作表中的按钮或从另一个 SUB 中调用它时,部分代码会失败(我的最终目标)。

“####” 之间突出显示的部分失败了。它不会移动下面的标签。就好像它跳过了那行。ChartDataLablesMARVEL每次使用相同的代码都可以正常工作。

我尝试过取消选择上一个选项,或者直接选择ChartDataLablesDC第一个选项然后重新定位。同样,通过按钮或 SUB 调用时不起作用。

我是 VBA 新手,我很困惑。我不明白它为什么会有这样的反应。

非常感激任何帮助或想法?

谢谢

Public Sub LastDataLabelsMARVELABOVE()
'Formatting the position pf the last data labels in my chart 

Dim MyChart As Chart
Dim ChartPointsDC As Points
Dim ChartPointsMARVEL As Points
Dim ChartDataLablesDC As DataLabel
Dim ChartDataLablesMARVEL As DataLabel

Set MyChart = ActiveSheet.ChartObjects("Chart 11").Chart

Set ChartPointsMARVEL = MyChart.SeriesCollection(1).Points
Set ChartDataLablesMARVEL = ChartPointsMARVEL(ChartPointsMARVEL.Count).DataLabel
Set ChartPointsDC = MyChart.SeriesCollection(2).Points
Set ChartDataLablesDC = ChartPointsDC(ChartPointsDC.Count).DataLabel


With MyChart
    With ChartDataLablesMARVEL
        .Position = xlLabelPositionAbove
    End With
**'#########THIS PART IS NOT WORKING WHEN CALLED BY A BUTTON OR WITHIN A SUB    
    With ChartDataLablesDC
        .Position = xlLabelPositionBelow
    End With
'##########**
MyChart.SeriesCollection(1).Points(ChartPointsMARVEL.Count).DataLabel.Select
            Selection.Left = 466
MyChart.SeriesCollection(2).Points(ChartPointsDC.Count).DataLabel.Select
            Selection.Left = 466
End Sub

编辑 - 14/03/19

感谢@TED_D 的建议,我重新修改了我的 WITH 语句,并设法使代码在使用工作表上的按钮时正确运行。

但是,似乎总是存在这样的问题,当我将此代码作为另一个 SUB 的一部分调用时,我仍然会遇到相同的原始问题。将ChartDataLablesDC其移动到下方(或上方)会失败。MARVEL 标签代码将标签移动到上方或下方,没有任何问题。只有 DC 代码会失败。

我的目标是将其全部包装在一个 SUB 中,其中我调用两个 ALL LABELS 子程序,然后调用上面的 FINAL LABELS 代码。

所有标签

Sub MARVELLabelsAbove()
    ActiveSheet.ChartObjects("Chart 11").Activate
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).DataLabels.Select
    Selection.Position = xlLabelPositionAbove
    Selection.AutoText = True
End Sub
Sub DCLabelsBelow()
    ActiveSheet.ChartObjects("Chart 11").Activate
    ActiveChart.SeriesCollection(2).Select
    ActiveChart.SeriesCollection(2).DataLabels.Select
    Selection.Position = xlLabelPositionBelow
    Selection.AutoText = True
End Sub

我很高兴我成功地通过工作表上的按钮使我的代码工作,但我想了解为什么在使用我的 ALL LABELS 代码调用时 FINAL LABELS 代码的最后一部分会失败。

相关内容