リストボックス|コンボボックスにデータベースのオブジェクトを表示させるには

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

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

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

  3. フォーム上にトグルボタンを使用したオプショングループリストボックスを作成します。

    Forms_Intermediate_003_fig1
    図1-フォーム上にオプショングループとリストボックスを作成した例
  4. オプショングループとリストボックスのプロパティを以下のように設定します。
    Object Property Setting
    リストボックス Name lstObjects
    Column Count 1
    Column Heads No
    Row Source Type Value List
    Row Source  
    Bound Column 0
    オプショングループ Name grpObjects
    トグルボタン1-6
    0 Table
    1 Query
    2 Form
    3 Report
    4 Macro
    5 Module
    Default Value 3
  5. オプショングループのAfterUpdateイベントに以下のコードをコピー&ペーストします。
    Private Sub grpObjects_AfterUpdate()
    
        Dim db As Database
        Dim tdf As TableDef
        Dim qdf As QueryDef
        Dim ctr As Container
        Dim doc As Document
        
        Dim strName As String
        Dim strOutput As String
        Dim fSystemObj As Boolean
    
        Set db = CurrentDb()
        With db
          Select Case grpObjects
            Case acTable
              .TableDefs.Refresh
                For Each tdf In .TableDefs
                  With tdf
                    fSystemObj = _
    		 IsSystemObject(acTable, .Name, .Attributes)
                    If Not fSystemObj And _
                        ((.Attributes And dbHiddenObject) = 0) Then
                        strOutput = strOutput & ";" & .Name
                    End If
                  End With
                Next tdf
            Case acQuery
                .QueryDefs.Refresh
                For Each qdf In .QueryDefs
                  With qdf
                    fSystemObj = IsSystemObject(acQuery, .Name)
                    If Not fSystemObj Then
                        strOutput = strOutput & ";" & .Name
                    End If
                  End With
                Next qdf
            Case acForm
                Set ctr = .Containers("Forms")
            Case acReport
                Set ctr = .Containers("Reports")
            Case acMacro
                Set ctr = .Containers("Scripts")
            Case acModule
                Set ctr = .Containers("Modules")
          End Select
        End With
        Select Case grpObjects
            Case acForm, acReport, acMacro, acModule
                ctr.Documents.Refresh
                For Each doc In ctr.Documents
                    strName = doc.Name
                    fSystemObj = IsSystemObject(grpObjects, strName)
                    If Not fSystemObj And _
                       Not IsDeleted(strName) Then
                        strOutput = strOutput & ";" & strName
                    End If
                Next doc
        End Select
        
        strOutput = Mid(strOutput, 2)
        lstObjects.RowSource = strOutput	' Max 2048 	
        lstObjects = 0
        
    End Sub
    
  6. フォーム上のモジュールにAfterUpdateイベントで使用する関数IsDeleted()IsSystemObject()をコピー&ペーストします。
    Private Function IsDeleted(ByVal strName As String) As Boolean
        IsDeleted = (Left(strName, 7) = "~TMPCLP")
    End Function
    
    Private Function IsSystemObject(intType As Integer, _
              ByVal strName As String, _
              Optional ByVal varAttribs As Variant)
        
        If IsMissing(varAttribs) Then
            varAttribs = 0
        End If
        
        If (Left(strName, 4) = "USys") Or _
    	Left(strName, 4) = "~sq_" Then
            IsSystemObject = True
        Else
            IsSystemObject = ((intType = acTable) And _
             ((varAttribs And dbSystemObject) <> 0))
        End If
        
    End Function
  7. フォームをビューモードに切り替えて確認します。
    Forms_Intermediate_003_fig2
    図2-リストボックスにNorthwind.mdbのテーブル一覧を表示させた例

 


Tip1
リストボックスからオブジェクトをクリックしたときは、オブジェクトをデザインモードで開くには以下のようにします。

Dim strObject As String

strObject = lstObjects.Column(0)
Select Case grpObjects
      Case acTable
            DoCmd.OpenTable strObject, acDesign
      Case acQuery
            DoCmd.OpenQuery strObject, acDesign
      Case acForm
            DoCmd.OpenForm strObject, acDesign
      Case acReport
            DoCmd.OpenReport strObject, acDesign
      Case acMacro            
            DoCmd.SelectObject acMacro, strObject, True
            SendKeys "%d", True
      Case acModule
            DoCmd.OpenModule strObject
End Select  

Tip2
リストボックスからオブジェクトをクリックしたときは、オブジェクトを開くには以下のようにします。

Dim strObject As String

strObject = lstObjects.Column(0)
Select Case grpObjects
      Case acTable
            DoCmd.OpenTable strObject
      Case acQuery
            DoCmd.OpenQuery strObject
      Case acForm
            DoCmd.OpenForm strObject
      Case acReport
            DoCmd.OpenReport strObject, acPreview
      Case acMacro
            DoCmd.RunMacro strObject
      Case acModule            
End Select