| リストボックス・コンボボックスにテーブル名一覧を表示する方法 |
|
対象バージョン : 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.プロパティの設定
プロパティシートの "値集合タイプ" に関数名を直接入力します。

解 説