Vba 如何根据Access中表中的列向窗体添加复选框?
我在Access中有一个表单,允许用户从组合框中选择一个表,该组合框使用VBA列出所有表。根据用户选择的表,我希望在表单中添加一组复选框。每个复选框将表示所选表中的一列。我有一个VBA函数,可以在按下按钮后处理通过表单选择的列 在用户选择表格后,我将如何使复选框出现?我希望此表单也适用于将来添加的表,这样我就不会提前知道列的数量。我可以让复选框在Userform中动态显示,但我听说它们在Access中并不常用。我还听说,在窗体的生命周期中,可以添加到窗体中的控件数量是有限制的。是否有重命名控件的方法,这样我就不会达到这个限制 这是我用来填充组合框的代码:Vba 如何根据Access中表中的列向窗体添加复选框?,vba,ms-access,Vba,Ms Access,我在Access中有一个表单,允许用户从组合框中选择一个表,该组合框使用VBA列出所有表。根据用户选择的表,我希望在表单中添加一组复选框。每个复选框将表示所选表中的一列。我有一个VBA函数,可以在按下按钮后处理通过表单选择的列 在用户选择表格后,我将如何使复选框出现?我希望此表单也适用于将来添加的表,这样我就不会提前知道列的数量。我可以让复选框在Userform中动态显示,但我听说它们在Access中并不常用。我还听说,在窗体的生命周期中,可以添加到窗体中的控件数量是有限制的。是否有重命名控件的
Private Sub Form_Load()
Dim tbl As DAO.TableDef
Dim db As Database
Set db = CurrentDb
With Me![TableName]
For Each tbl In db.TableDefs
If Not (tbl.name Like "MSys*" Or tbl.name Like "~*") Then
.AddItem tbl.name
End If
Next
End With
End Sub
这是可以在Userform中生成复选框的示例代码:
Private Sub RetrieveColumns_Click()
Dim TableName As String
Dim MethodName As String
Dim tdf As DAO.TableDef
Dim rs As Recordset
Dim fld As Field
Dim chkBox As MSForms.CheckBox
TableName = Me![TableName]
Set tdf = dbs.CreateTableDef(TableName)
Set rs = dbs.OpenRecordset(TableName)
With rs
For i = 0 To .Fields.Count - 1
Set chkBox = Me.Controls("Forms.checkbox.1", "CheckBox_" & i)
chkBox.Caption = .Fields(i).name
chkBox.Left = 5
chkBox.Top = 5 + ((i - 1) * 20)
Next i
End With
End Sub
最好的解决方案是一个连续的表单/数据表,该表单/数据表显示所有带有相邻复选框的表列名 创建一个带有
ColumnName
(文本)和复选框的表(是/否,默认否)
然后,选择表格时:
- 从该表中删除*
- 在
.Fields
循环中,将所有列名插入此表
- 并将表格显示为子窗体(或在表格标题中显示表格选择组合框)
这样,您就不需要任何动态控件
或者,对于真正简单的解决方案,使用多选列表框
列表框有一个稍微模糊的行源类型
字段列表
数据是RowSource设置指定的表、查询或SQL语句中的字段名列表
因此,您只需将RowSource
属性设置为所选的表名。最好的解决方案是一个连续的表单/数据表,该表单/数据表显示所有表列名,并带有一个相邻的复选框
创建一个带有ColumnName
(文本)和复选框的表(是/否,默认否)
然后,选择表格时:
- 从该表中删除*
- 在
.Fields
循环中,将所有列名插入此表
- 并将表格显示为子窗体(或在表格标题中显示表格选择组合框)
这样,您就不需要任何动态控件
或者,对于真正简单的解决方案,使用多选列表框
列表框有一个稍微模糊的行源类型
字段列表
数据是RowSource设置指定的表、查询或SQL语句中的字段名列表
因此,您只需将RowSource
属性设置为所选的表名。谢谢!我没想到要用额外的桌子。谢谢!我没想到要用那张多余的桌子。