首页 > 解决方案 > 对单击的 OLE Checkbox 对象做出反应的 Excel VBA 也会锁定键盘 - 但为什么呢?

问题描述

我在工作表“FA 2.0 定价工作表”中有一个复选框“Check_Group”。我在所述工作表中定义了一个子例程,当用户单击它时,它会在其他地方更改一些值:

Private Sub Check_Group_Click()

    Active = ActiveSheet.Name
    Sheets("FA 2.0 Pricing Worksheet").Activate 'This activate has to happen here because there are some steps in a different routine where this checkbox has to be clicked programmatically
    If ActiveSheet.OLEObjects("Check_Group").Object.Value = True Then
        Sheets("FA 2.0 Risk Checklist").Range("UI_GROUP_RISK").Value = "No"
    Else
        Sheets("FA 2.0 Risk Checklist").Range("UI_GROUP_RISK").Value = "Yes"
    End If
    Sheets(Active).Select

End Sub

这就像一个魅力,除了我注意到一个特别烦人的副作用 - 键盘似乎在你点击后锁定!

我可以毫无问题地单击单元格并在工作表中导航,但是当我尝试输入(未受保护的)单元格时,它根本不会对我的按键做出反应。

我已经通过调试器确认EnableEventsScreenUpdating都打开了。

我可以通过单击另一个选项卡并返回来绕过这个问题 - 输入正常工作然后......在之前无法输入的完全相同的单元格中!我仍然想找到一个解决方案,而不仅仅是这种廉价的解决方法。

这是在 Excel 2016 中。

为什么我的子程序会锁定键盘?

标签: vbaexcelole

解决方案


无需激活工作表即可执行代码。而且,当您在工作表代码模块中时,您可以使用Me

Private Sub Check_Group_Click()
    Me.Range("UI_GROUP_RISK").Value = IIf(Me.Check_Group.Value, "No", "Yes") 
End Sub

推荐阅读