リストボックス・コンボボックスにテーブル名一覧を表示する方法 |
対象バージョン : 97, 2000, 2002, 2003, 2007
最終更新日 : 2007/03/11
(オリジナル作成日 : 2002/08/27)
概 要
リストボックス、あるいはコンボボックスの "値集合タイプ" プロパティに、表示内容を設定するユーザー定義関数を指定することができます。これを利用して同じ MDB(ADP) 内に存在するテーブルの一覧を表示する方法です。
作成手順
1.プロシージャの作成
標準モジュールで作成する場合です。
Option Compare Database Option Explicit ' モジュールレベル変数の宣言 Dim arrTBL() As String Dim intTBL As Integer ' リスト表示設定のユーザー定義関数 Public Function ListTables(fld As Control, id As Variant, row As Variant, _ col As Variant, code As Variant) As Variant Dim ReturnVal As Variant ReturnVal = Null Select Case code Case acLBInitialize Call GetTableNamesByDAO ' DAO を使用の場合 ' Call GetTableNamesByADO ' ADO を使用の場合 ReturnVal = intTBL Case acLBOpen ReturnVal = Timer Case acLBGetRowCount ReturnVal = intTBL Case acLBGetColumnCount ReturnVal = 1 Case acLBGetColumnWidth ReturnVal = -1 Case acLBGetValue ReturnVal = arrTBL(row) Case acLBEnd Erase arrTBL End Select ListTables = ReturnVal End Function ' テーブル名取得(DAO 版) Private Sub GetTableNamesByDAO() Dim db As DAO.Database Dim tdef As DAO.TableDef Set db = CurrentDb intTBL = 0 ReDim arrTBL(db.TableDefs.Count) For Each tdef In db.TableDefs If (tdef.Attributes And dbSystemObject) = 0 Then intTBL = intTBL + 1 arrTBL(intTBL - 1) = tdef.Name End If Next db.Close Set db = Nothing End Sub ' テーブル名取得(ADO 版) Private Sub GetTableNamesByADO() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection intTBL = 0 ReDim arrTBL(cat.Tables.Count) For Each tbl In cat.Tables If tbl.Type = "TABLE" Then intTBL = intTBL + 1 arrTBL(intTBL - 1) = tbl.Name End If Next Set cat = Nothing End Sub
※モジュールの参照設定で、ライブラリの指定が必要です。
n.n の部分は、バージョンを示します。
2.プロパティの設定
プロパティシートの "値集合タイプ" に関数名を直接入力します。
解 説