2016-11-19 9 views
1

私は、VBAを使用してすべてのテーブルをリストするコンボボックスからテーブルを選択するためのフォームをAccessに用意しています。ユーザーが選択するテーブルに基づいて、フォームに追加する一連のチェックボックスが必要です。各チェックボックスは、選択したテーブルの列を表します。ボタンを押した後にフォームを通じて選択された列で機能する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

関連する問題