2009-06-17 156 views
1

继我之前的问题。通过VBA检测对复选框的更改

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

我遇到的问题是:

  • 点击项目,然后关闭窗体后Excel询问,如果我们想保存。这是不可取的。

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

我添加的复选框的代码如下所示:

 ' 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 

那么,你如何链接一个复选框的更改与子/功能?

回答

6

将复选框对象的OnAction属性设置为您希望在复选框处于选中状态或未选中状态时运行的子对象的名称。

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
+0

我把CheckboxChange()模块和片材代码隐藏在二者但两者给我的错误“无法运行宏‘ent_cc_new_pb.xls!CheckboxChange’宏可能无法在此工作簿或所有可用宏可能被禁用'但是在打开工作簿时,它使我可以选择启用我同意的宏任何想法 – 2009-06-18 08:35:05

1

我不认为有Excel.Checkbox控件可用的任何事件。尝试使用MSForms复选框。你需要一个对“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 

很明显,你只能够处理的复选框集数这样 - 我建议创建一个容纳每个复选框的类。