通过VBA检测对checkbox的更改

继我上一个问题之后。

客户的要求是在报告上有checkbox来禁用另一张纸上的信息行。 行被定义为命名范围,由P_XXXXXX格式化。 XXXXXX是一个唯一的标识符,也是行中的一个字段,所以我可以轻松地生成范围名称。

我遇到的问题是:

  • 点击这些项目后,然后closuresExcel表格询问我们是否要保存。 这是不好的。

我需要注册发生在我生成的checkbox上的更改事件。 所以如果一个或多个更改可以通过并隐藏/取消隐藏相关范围。

我添加checkbox的代码如下所示:

' For each row... ' check box in column 17(=Q). Dim lCenter As Long lCenter = rngCurrent.Width / 4 ' not actual centre but close enough With ActiveSheet.CheckBoxes.Add(rngCurrent.Left + lCenter, rngCurrent.Top - 2, rngCurrent.Width, rngCurrent.Height) .Interior.ColorIndex = xlNone .Caption = "" End With 

那么如何将checkbox中的变化与子/function链接?

将Checkboxes对象的OnAction属性设置为每当checkbox被选中或取消选中时要运行的子的名称。

 Sub MakeCB() With ActiveSheet.CheckBoxes.Add(ActiveCell.Left + 0, ActiveCell.Top - 2, ActiveCell.Width, ActiveCell.Height) .Interior.ColorIndex = xlNone .Caption = "" .OnAction = "CheckboxChange" End With End Sub Sub CheckboxChange() MsgBox "change" End Sub 

我不认为Excel.Checkbox控件有任何可用的事件。 尝试使用MSFormscheckbox。 你需要一个对“Microsoft Forms 2.0 Object Library”的引用 – 它不可以重新发布,但是如果你使用的是VBA,那很好。

然后你可以做这样的事情,并以通常的方式处理事件:

 ''class level Private WithEvents m_Checkbox as MSForms.CheckBox Public Sub MakeCheckbox() Set m_Checkbox = Activesheet.OLEObjects.Add("Forms.Checkbox.1") End Sub Private Sub m_Checkbox_Click() ''Do stuff End Sub 

显然,你只能通过这种方式处理一定数量的checkbox – 我会build议创build一个类来保存每个checkbox。