以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
你的代码中有几个问题需要解决,以下是修改后的代码和解释:
-
数组定义:你定义了一个数组 checkboxes(1 To 50) As MSForms.checkbox,但实际上你并没有使用这个数组。你可以直接在循环中处理每个checkbox。
-
控件类型检查:你使用了 TypeOf choiceForm.Controls(i) Is MSForms.checkbox 来检查控件类型。这在某些情况下可能不准确,特别是当控件名称不是数字时。更可靠的方法是使用 TypeName。
-
控件名称:你应该使用 Me 而不是 choiceForm 来引用当前窗体。
-
消息框显示:你使用了 MsgBox 来显示选中的checkbox的caption值,但这种方式会在每次选中时弹出一个消息框,可能会影响用户体验。
以下是修改后的代码:
Private Sub cmdFY_Click()
Dim ctl As Control
Dim selectedCaptions As New Collection
For Each ctl In Me.Controls
If TypeName(ctl) = "CheckBox" Then
If ctl.Value = True Then
selectedCaptions.Add ctl.Caption
End If
End If
Next ctl
' 显示所有选中的checkbox的caption值
Dim caption As Variant
Dim message As String
For Each caption In selectedCaptions
message = message & caption & vbCrLf
Next caption
If message <> "" Then
MsgBox "Selected checkboxes:" & vbCrLf & message
Else
MsgBox "No checkboxes are selected."
End If
End Sub
解释:
- 遍历控件:使用
For Each ctl In Me.Controls 遍历当前窗体的所有控件。 - 检查类型:使用
TypeName(ctl) = "CheckBox" 来确保处理的是checkbox控件。 - 检查选中状态:使用
ctl.Value = True 来检查checkbox是否被选中。 - 收集caption值:将选中的checkbox的caption值添加到
selectedCaptions 集合中。 - 显示结果:使用一个字符串变量
message 来收集所有选中的checkbox的caption值,并在最后使用 MsgBox 显示。
这样,你就可以在点击按钮时显示所有选中的checkbox的caption值。