在Excel中取消选择活动图表对象而不使用SendKeys

时间:2018-05-18 18:47:24

标签: excel vba excel-vba

遇到一个我无法弄清楚的小问题。我有一个小的ComboBox1_Change事件,我遍历所有ActiveSheet.ChartObjects并根据ComboBox1.Value进行一些更改。

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

img1

我无法弄清楚如何失去这个选择。我尝试了几件事(Range("A1").SelectRange("A1").ActivateActiveChart.DeselectActiveChart.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

1 个答案:

答案 0 :(得分:2)

我无法复制您的问题,但您应该能够在不选择每个图表的情况下完成所需的一切。

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