如何根据Access中表格中的列向表单添加复选框?

时间:2016-11-19 23:15:24

标签: 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

1 个答案:

答案 0 :(得分:0)

最佳解决方案是连续表单/数据表,其中显示所有表列名称以及相邻的复选框。

使用ColumnName(文字)和Checked创建一个表格(是/否,默认否)。

然后选择一个表:

  • 从此表中删除*,
  • .Fields循环中,将所有列名称插入此表
  • 并将表格显示为子表单(或在表单标题中包含表格选择组合框)。

有了这个,你不需要任何动态控制。

或者,对于一个真正简单的解决方案,请使用多选列表框。

列表框略微模糊RowSourceType 字段列表

  

数据是由RowSource设置指定的表,查询或SQL语句中的字段名称列表。

所以你需要的是将RowSource属性设置为选定的表名。