リストボックス・コンボボックスにテーブル名一覧を表示する方法 Hit Counter

対象バージョン : 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.プロパティの設定

プロパティシートの "値集合タイプ" に関数名を直接入力します。

 

解 説

 


目次へ戻る