Vba Word用户窗体中的复选框控件

Vba Word用户窗体中的复选框控件,vba,ms-word,Vba,Ms Word,我有一个Word用户表单(Word 2007),带有复选框和两个命令控件-Ok和Cancel 当从宏菜单或指定的图标激活表单时,我单击复选框,什么也不会发生。当我点击OK按钮时,会出现一条消息,告诉我我没有选择任何内容!当我点击“取消”按钮时,表单将卸载 复选框由单击事件组成,单击事件从选中切换到取消选中。还有一个SelectAll复选框。单击时,将选中或取消选中所有其他复选框。当其他复选框之一未选中时,SelectAll复选框也未选中 当我从VBE激活表单时,一切正常 以下是我所说的示例: S

我有一个Word用户表单(Word 2007),带有复选框和两个命令控件-Ok和Cancel

当从宏菜单或指定的图标激活表单时,我单击复选框,什么也不会发生。当我点击OK按钮时,会出现一条消息,告诉我我没有选择任何内容!当我点击“取消”按钮时,表单将卸载

复选框由单击事件组成,单击事件从选中切换到取消选中。还有一个SelectAll复选框。单击时,将选中或取消选中所有其他复选框。当其他复选框之一未选中时,SelectAll复选框也未选中

当我从VBE激活表单时,一切正常

以下是我所说的示例:

Sub Loadform()
Load UserForm1
UserForm1.Show
End Sub

Private Sub btnCancel_Click()
Unload Me
End Sub

Private Sub btnOK_Click()
If Me.CheckBox2.Value = True And Me.CheckBox3.Value = True Then
    MsgBox "All checkboxes are checked"
ElseIf Me.CheckBox2.Value = True Then
    MsgBox Me.CheckBox2.Name & " is checked"
ElseIf Me.CheckBox3.Value = True Then
    MsgBox Me.CheckBox3.Name & " is checked"
ElseIf Me.CheckBox2.Value = False And Me.CheckBox3.Value = False Then
    MsgBox "You haven't selected any checkboxes."
End If

End Sub

Private Sub CheckBox2_Click()
If Me.CheckBox2.Value = True Then
    Me.CheckBox2.Value = False
    Me.ckbSelectAll.Value = False
Else
    Me.CheckBox2.Value = True
End If
End Sub

Private Sub CheckBox3_Click()
If Me.CheckBox3.Value = True Then
    Me.CheckBox3.Value = False
    Me.ckbSelectAll.Value = False
Else
    Me.CheckBox3.Value = True
End If
End Sub

Private Sub ckbSelectAll_Click()
If Me.ckbSelectAll.Value = True Then
    Me.ckbSelectAll.Value = False
Else
    Me.ckbSelectAll.Value = True
End If
If ckbSelectAll.Value = False Then
    Me.CheckBox2.Value = False
    Me.CheckBox3.Value = False
Else
    Me.CheckBox2.Value = True
    Me.CheckBox3.Value = True
End If
End Sub

在单击事件处理程序中,例如

Private Sub CheckBox3_Click()

...

End Sub
检查复选框是否已选中(即值为
true
),如果已选中,则将值设置为
false
。这意味着一个复选框在被选中时总是被取消选中(或者在被取消选中时总是被选中),这使得复选框看起来无法正常工作

下面是一个单击事件处理程序启动的示例(我很久没有编写VBA了,但我认为下面的内容可以。现在将进行测试…)


如果您需要任何进一步的帮助或提示,请留言

谢谢Russ这么快的回答。你给我的密码不起作用。我真正想做的是,如果我点击SelectAll,复选框2和复选框3都被选中。如果我取消选中复选框2或复选框3,则SelectAll将被取消选中。我的真实表格有大约17个复选框。谢谢你的帮助。虽然它确实可以工作,但如果不更改代码的其余部分,它将无法工作(我拒绝给您提供更完整的代码,因为我认为真正研究给出的代码是一个好主意:)。VBA上的两个指针—单击复选框将切换其值,因此不需要在代码中手动执行。其次,控件有一个默认属性,对于复选框,该属性是值。因此,检查“If checkbox.Value=false”与写“If Not checkbox”是一样的。第三,IIRC,这是一个真正的痛苦!在VBA中,如果在代码中设置复选框值,它将引发该复选框的单击事件。因此,如果您在代码中设置SelectAll复选框值,它将引发SelectAll复选框的click事件,并在事件处理程序中执行代码,这可能会有一些意外行为,具体取决于您所做的操作;我们在处理程序中执行。有很多方法可以解决这个问题,一旦你到了那个地步,我就可以探讨:)希望这对你有帮助谢谢。我会再来一次,告诉你我的进展。刀
Private Sub CheckBox2_Click()
    ' If checkbox2 is checked but checkbox3 is not, ' 
    ' uncheck the select all checkbox '
    If CheckBox2 And Not CheckBox3Then
        ckbSelectAll = False
    End If
End Sub