2016-11-19 134 views
1

我在Access中有一個表單,允許用戶從列出使用VBA的所有表格的組合框中選擇一個表格。根據用戶選擇的表格,我希望將一組複選框添加到表單中。每個複選框將代表所選表格中的一列。我有一個VBA函數,它可以處理按下按鈕後通過表單選擇的列。如何根據Access表中的列將複選框添加到表單中?

如何在用戶選擇表後顯示覆選框?我希望這個表格適用於將來會添加的表格,所以我不會提前知道列的數量。我可以使複選框在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 

這是示例代碼,可以在用戶窗體產生的複選框:

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

最好的解決辦法是一個連續的表格/數據表,用相鄰的複選框顯示所有表格列名稱。

ColumnName(文本)和Checked(是/否,默認否)創建一個表格。

然後當一個表中選擇:

  • 刪除*從該表中,
  • 在你.Fields循環,插入所有列名到這個表中,
  • 並顯示錶作爲子窗體(或在表單頭中有表格選擇組合框)。

有了這個,你不需要任何動態控件。


或者,對於真正簡單的解決方案,請使用多選列表框。

列表框有一個不太明顯的RowSourceType字段列表

該數據是來自RowSource設置指定的表,查詢或SQL語句的字段名稱列表。

所以你只需要將RowSource屬性設置爲選定的表名。

+0

謝謝!我沒有想到使用額外的桌子。 – kaineub

相關問題