首页 > 解决方案 > 在不使用 SendKeys 的情况下取消选择 Excel 中的活动图表对象

问题描述

遇到一个我无法弄清楚的小问题。我有一个小ComboBox1_Change事件,我循环遍历所有ActiveSheet.ChartObjects内容并基于ComboBox1.Value.

但是,代码运行完成后,选择仍然集中在我工作表上的最后一个图表对象上(请参见图表边框上的 4 个小圆圈):

图像1

我不知道如何失去这个选择。我已经尝试了几件事(Range("A1").Select, Range("A1").Activate, ActiveChart.Deselect, ActiveChart.ChartObjects.Deselect),但这些在子程序中都不起作用(如果我在这个子程序Range("A1").Select之后运行另一个子程序,那么我成功取消选择图表对象。)

我可以使用 取消选择图表对象SendKeys,但我真的很想避免这种情况。必须有另一种方法来完成这项工作 - 有什么建议吗?

代码:

Private Sub ComboBox1_Change()

Application.ScreenUpdating = False

For Each cht In ActiveSheet.ChartObjects
    cht.Activate
    ActiveChart.ChartTitle.Text = ComboBox1.Value
    'Some other stuff, excluded.
Next cht

'Range("A1").Activate  -  doesn't work

'Range("A1").Select  -  doesn't work

'ActiveChart.Deselect  -  doesn't work

'ActiveChart.ChartObjects.Deselect  -  doesn't work, throws error

'SendKeys "{ESC}"  - works, but I'd rather not.

Application.ScreenUpdating = True

End Sub

标签: vbaexcel

解决方案


我无法复制您的问题,但您应该能够在不选择每个图表的情况下做所有您需要做的事情。

Private Sub ComboBox1_Change()
    Dim chtObj As ChartObject
    Dim cht As Chart

    Application.ScreenUpdating = False
        For Each chtObj In ActiveSheet.ChartObjects
            Set cht = chtObj.Chart
            cht.ChartTitle.Text = ComboBox1.Value
            'Some other stuff, excluded.
        Next chtObj
    Application.ScreenUpdating = True
End Sub

推荐阅读