VBA – 循环中的每个checkbox会在出现变化时作出反应,如何停止?

我是VBA新手。 我search了很长时间,以find一个方法有无限期(不同)的ActiveXcheckbox,但没有相应数量的_click潜艇,但我不能使它的工作。

我以为我用Form Controlsfind了一个方法,但它似乎并不完美。 这是我的代码点击cbxReady(一个项目准备好时,checkbox,只能勾选cbxStart被打勾):

LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row For s = 1 To LastRow - 2 If ActiveSheet.CheckBoxes("cbxReady" & s).Value = 1 Then ActiveSheet.Cells(s + 2, "A").Interior.Color = RGB(255, 255, 0) ElseIf ActiveSheet.CheckBoxes("cbxReady" & s).Value = -4146 Then ActiveSheet.Cells(s + 2, "A").Interior.Color = RGB(218, 238, 243) End If Next 

这是cbxStart:

 LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row For s = 1 To LastRow - 2 If ActiveSheet.CheckBoxes("cbxStart" & s).Value = 1 Then ActiveSheet.Cells(s + 2, "A").Interior.Color = RGB(218, 238, 243) With ActiveSheet.CheckBoxes("cbxReady" & s) .Enabled = True .Value = -4146 End With ElseIf ActiveSheet.CheckBoxes("cbxStart" & s).Value = -4146 Then ActiveSheet.Cells(s + 2, "A").Interior.Color = RGB(255, 0, 0) With ActiveSheet.CheckBoxes("cbxReady" & s) .Enabled = False .Value = 2 End With End If Next 

这个想法是,checkbox命名为cbxStart和cbxReady从1到任何,当我点击cbxStart,列A中的单元格(通过colorcoding指示项目的状态)将变成蓝色,然后如果我单击cbxReady然后它将转黄色。 到现在为止还挺好。

但是,这发生了:
第一排,都是勾号,颜色是黄色的,都是好的;
第二行,两者都是未勾选的,我勾选了cbxStart,它变成了蓝色,但是第一排变成了蓝色,以及它的cbxReady剔除。

所以基本上,即使checkbox命名不同,每个checkbox都会对不确定事件作出反应。

有人可以帮我吗? 如果使用ActiveX更容易,我也会很感激,因为我不知道有多less我会有,我想他们引用一个cbxStart_click()和一个cbxReady_click()。

谢谢!

这样做的诀窍是有一个处理Click事件的类。

MyCheckBox类

 Private WithEvents Check As MSForms.CheckBox Private Sub Check_Click() MsgBox Check.Object.Value End Sub Public Sub SetCheckBox(ck As OLEObject) Set Check = ck.Object End Sub 

接下来,您需要将每个检查添加到新的MyCheckBox类,并将MyCheckBox添加到模块级集合。

 Public Checks As Collection Private Sub AddCheckboxes() Dim o As OLEObject Dim ck As MyCheckBox Set Checks = New Collection For Each o In ActiveSheet.OLEObjects Set ck = New MyCheckBox ck.SetCheckBox o Checks.Add ck Next End Sub 

现在每当一个checkbox被点击时, Private Sub Check_Click()将被调用。