Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何根据Access中表中的列向窗体添加复选框?_Vba_Ms Access - Fatal编程技术网

Vba 如何根据Access中表中的列向窗体添加复选框?

Vba 如何根据Access中表中的列向窗体添加复选框?,vba,ms-access,Vba,Ms Access,我在Access中有一个表单,允许用户从组合框中选择一个表,该组合框使用VBA列出所有表。根据用户选择的表,我希望在表单中添加一组复选框。每个复选框将表示所选表中的一列。我有一个VBA函数,可以在按下按钮后处理通过表单选择的列 在用户选择表格后,我将如何使复选框出现?我希望此表单也适用于将来添加的表,这样我就不会提前知道列的数量。我可以让复选框在Userform中动态显示,但我听说它们在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
属性设置为所选的表名。

谢谢!我没想到要用额外的桌子。谢谢!我没想到要用那张多余的桌子。