我在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
答案 0 :(得分:0)
最佳解决方案是连续表单/数据表,其中显示所有表列名称以及相邻的复选框。
使用ColumnName
(文字)和Checked
创建一个表格(是/否,默认否)。
然后选择一个表:
.Fields
循环中,将所有列名称插入此表有了这个,你不需要任何动态控制。
或者,对于一个真正简单的解决方案,请使用多选列表框。
列表框略微模糊RowSourceType
字段列表。
数据是由RowSource设置指定的表,查询或SQL语句中的字段名称列表。
所以你需要的是将RowSource
属性设置为选定的表名。