コンボボックス|リストボックスにデータベースのオブジェクト(テーブル、クエリー、フォーム、レポート、マクロ、モジュール)を表示させるには



リストボックスを例にデータベースのオブジェクトを表示させる方法を解説します。

  1. Access 97のサンプルデータベースNorthwind.mdbを開きます。

  2. データベースウインドウのフォームのタブをクリックしたら新規作成のボタンをクリックします。

  3. フォーム上にリストボックスとラジオボタン用のオプショングループを作成します。
    Forms_Expert_001_fig1
    図1-フォーム上にリストボックスとオプショングループを作成した例
  4. リストボックスとオプショングループのプロパティを次のように設定します。

    Object Property Setting
    List Box Name lstObject
    Column Count 1
    Column Heads No
    Row Source Type Table/Query
    Row Source  
    Bound Column 1
    Option Group Name grpObject
    オプションボタン1-6
    0 Tables
    1 Queries
    2 Forms
    3 Reports
    4 Macros
    5 Modules
    Default Value 3
  5. オプショングループのAfterUpdateイベントに以下のコードをコピー&ペーストします。

    Private Sub grpObject_AfterUpdate()
      Dim strSQL As String
    
      Select Case grpObject
          Case acTable
              strSQL = "SELECT MSysObjects.Name FROM MsysObjects" _
                     & " WHERE (Left([Name],1)<>'~')" _
                     & " AND (Left([Name],4) <> 'Msys')" _
                     & " AND (MSysObjects.Type)=1" _
                     & " ORDER BY MSysObjects.Name;"
          Case acQuery
              strSQL = "SELECT MSysObjects.Name FROM MsysObjects" _
                     & " WHERE (Left([Name],1)<>'~')" _
                     & " AND (MSysObjects.Type)=5" _
                     & " ORDER BY MSysObjects.Name;"
          Case acForm
              strSQL = "SELECT MSysObjects.Name FROM MsysObjects" _
                     & " WHERE (Left([Name],1)<>'~')" _
                     & " AND (MSysObjects.Type)=-32768" _
                     & " ORDER BY MSysObjects.Name;"
          Case acReport
              strSQL = "SELECT MSysObjects.Name FROM MsysObjects" _
                     & " WHERE (Left([Name],1)<>'~')" _
                     & " AND (MSysObjects.Type)= -32764" _
                     & " ORDER BY MSysObjects.Name;"
          Case acMacro
              strSQL = "SELECT MSysObjects.Name FROM MsysObjects" _
                     & " WHERE (Left([Name],1)<>'~')" _
                     & " AND (MSysObjects.Type)= -32766" _
                     & " ORDER BY MSysObjects.Name;"
          Case acModule
              strSQL = "SELECT MSysObjects.Name FROM MsysObjects" _
                     & " WHERE (Left([Name],1)<>'~')" _
                     & " AND (MSysObjects.Type)= -32761" _
                     & " ORDER BY MSysObjects.Name;"
      End Select
    
      With lstObject
          .RowSource = strSQL
          .Requery
      End With
    
    End Sub  
  6. フォームをビューモードに切り替えて確認します。

    Forms_Expert_001_fig2
    図2-リストボックスにデータベースのオブジェクトを表示させた例

注)
ここで使用しているクエリーは、Accessのシステムテーブルを直接参照していますので、Access 2000にバージョンアップした場合動作の保証はありません。