Arrays 从数组VBA动态创建复选框

Arrays 从数组VBA动态创建复选框,arrays,vba,excel,checkbox,Arrays,Vba,Excel,Checkbox,我有一个用户表单,如下所示: 当我选择所需的数据库并单击“选择”时,它会将我转到另一个页面: 所有这些复选框都是根据sql查询的输出创建的 在本例中,SQL查询为: ID NAME 8 AI_EQ 14 BB_EQ 19 DM_EQ 22 GD_EQ 等等 我在选择按钮中添加以下复选框(从记录集rst): 然后,我希望Finish按钮考虑用户选择的任何复选框。例如,如果他选择前两

我有一个用户表单,如下所示:

当我选择所需的数据库并单击“选择”时,它会将我转到另一个页面:

所有这些复选框都是根据sql查询的输出创建的

在本例中,SQL查询为:

ID            NAME
8             AI_EQ
14            BB_EQ
19            DM_EQ
22            GD_EQ
等等

我在选择按钮中添加以下复选框(从记录集
rst
):

然后,我希望Finish按钮考虑用户选择的任何复选框。例如,如果他选择前两个,我希望有“8,14”
ID
,这样我就可以将它们添加到新的SQL查询中

我想我必须创建一个数组来实现这一点,而不仅仅是使用
rst![名称]
。但是我创建它的尝试失败了,即使我正确使用了数组,我也不知道如何调整它,使它在选择
名称时返回
ID

这就是我试图创建数组的方式(但它没有返回任何内容)


任何提示/帮助都将不胜感激。

由于复选框是动态创建的,请执行此操作

  • 循环遍历所有控件并检查它们是否为复选框
  • 检查他们是否被检查过
  • 检查他们是否在
    .Tag
    中有内容,并将其存储在变量中
  • 代码

    Private Sub CommandButton1_Click()
        Dim cCont As Control
        Dim cbString As String
    
        For Each cCont In Me.Controls
            If TypeName(cCont) = "CheckBox" Then
                If cCont.Value = True Then
                    If cCont.Tag <> "" Then
                        If cbString = "" Then
                            cbString = cCont.Tag
                        Else
                            cbString = cbString & "," & cCont.Tag
                        End If
                    End If
                End If
            End If
        Next cCont
    
        Debug.Print cbString
    End Sub
    

    如上所述,西德哈特路:

      'creating checkboxes    
    
    If Not rst.EOF And Not rst.BOF Then
        rst.MoveFirst
        i = 0
        Do
            With MultiPage1.Pages(1).Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
                .Top = yPos
                .Left = 7
                .Caption = rst![name]
                .Width = 450
                .Height = 24
                .WordWrap = True
                .Value = False
                yPos = yPos + 17
                .Tag = rst![ID]
                i = i + 1
                rst.MoveNext
            End With
        Loop Until rst.EOF
    End If
    rst.Close
    cnn.Close  
    Set rst = Nothing
    Set cnn = Nothing
    

    如果要添加到阵列中,则在循环要添加到阵列中的项目时,需要重拨保留阵列并添加到该阵列中。
    Private Sub CommandButton1_Click()
        Dim cCont As Control
        Dim cbString As String
    
        For Each cCont In Me.Controls
            If TypeName(cCont) = "CheckBox" Then
                If cCont.Value = True Then
                    If cCont.Tag <> "" Then
                        If cbString = "" Then
                            cbString = cCont.Tag
                        Else
                            cbString = cbString & "," & cCont.Tag
                        End If
                    End If
                End If
            End If
        Next cCont
    
        Debug.Print cbString
    End Sub
    
    With MultiPage1.Pages(1).Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
        '
        '~~> Rest of the code
        '
        .Tag = rst![ID]
        '
        '~~> Rest of the code
        '
    End With
    
      'creating checkboxes    
    
    If Not rst.EOF And Not rst.BOF Then
        rst.MoveFirst
        i = 0
        Do
            With MultiPage1.Pages(1).Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
                .Top = yPos
                .Left = 7
                .Caption = rst![name]
                .Width = 450
                .Height = 24
                .WordWrap = True
                .Value = False
                yPos = yPos + 17
                .Tag = rst![ID]
                i = i + 1
                rst.MoveNext
            End With
        Loop Until rst.EOF
    End If
    rst.Close
    cnn.Close  
    Set rst = Nothing
    Set cnn = Nothing