meimei2022@ 2024-07-17 19:47 采纳率: 50%
浏览 100
已结题

VBA中在窗体中遍历所有checkbox控件,提取出被选中的checkbox的caption值

VBA中在窗体中遍历所有checkbox控件,判断是否被选中,提取出被选中的checkbox中的caption值,调试无错误提醒,就是没有值显示。

Private Sub cmdFY_Click()

 Dim i As Integer
  
  Dim checkboxes(1 To 50) As MSForms.checkbox
  
  For i = 1 To 50
    If TypeOf choiceForm.Controls(i) Is MSForms.checkbox Then
        Dim checkbox As MSForms.checkbox
        checkbox = choiceForm.Controls(i)
        
        If checkbox.Value = True Then
            MsgBox "Checkbox '" & checkbox.Caption & "' is selected."
                   
        End If
    End If
Next i
  
End Sub

  • 写回答

33条回答 默认 最新

  • 阿里嘎多学长 2024-07-17 19:47
    关注
    获得0.15元问题酬金

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你的代码中有几个问题需要解决,以下是修改后的代码和解释:

    1. 数组定义:你定义了一个数组 checkboxes(1 To 50) As MSForms.checkbox,但实际上你并没有使用这个数组。你可以直接在循环中处理每个checkbox。

    2. 控件类型检查:你使用了 TypeOf choiceForm.Controls(i) Is MSForms.checkbox 来检查控件类型。这在某些情况下可能不准确,特别是当控件名称不是数字时。更可靠的方法是使用 TypeName

    3. 控件名称:你应该使用 Me 而不是 choiceForm 来引用当前窗体。

    4. 消息框显示:你使用了 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值。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月25日
  • 创建了问题 7月17日