Arrays 从数组VBA动态创建复选框
我有一个用户表单,如下所示: 当我选择所需的数据库并单击“选择”时,它会将我转到另一个页面: 所有这些复选框都是根据sql查询的输出创建的 在本例中,SQL查询为: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按钮考虑用户选择的任何复选框。例如,如果他选择前两
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