|
T'sKitの「オブジェクト一括オープン」ツールでは、オブジェクトの種類ごとにオブジェクトの一覧を表示し、そこから指定されたものだけをオープンするようになっていますが、ここではまず個々のオブジェクトは指定せずに、テーブルならテーブルのすべてのオブジェクトを一括オープンしてみましょう。それには次のコードを実行します。
Dim dbs As Database
Dim tdf As TableDef
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
With tdf
If ((.Attributes And dbSystemObject) Or
_
(.Attributes And dbHiddenObject))
= 0 Then
DoCmd.OpenTable .Name, acViewDesign
End If
End With
Next tdf
|
このコードの "DoCmd.OpenTable...." 以外の行はすべて『#01 MDBオブジェクト一覧を取得する』で説明したものと同じです。
テーブル以外のオブジェクトについても同様に『#01 MDBオブジェクト一覧を取得する』で説明したコードに
"DoCmd.OpenQuery...."、"DoCmd.OpenForm...." などを追加すれば一括オープンすることができます。 |
|
続いて、リストボックスなどで指定された複数のオブジェクトを一括してオープンしたい場合や、異なるオブジェクトの種類の複数のオブジェクト、例えばあるテーブルとあるフォームをオープンしたい場合について説明します。 |
|
まず、リストボックスなどで指定されたオブジェクトをオープンする場合には、「すべてのテーブルオブジェクトを列挙するループ」の代わりに「リストボックスで選択されている項目のループ」を作り、その中から
"DoCmd.OpenTable...." などを使って開きます。
以下のコードでは、リストボックスの名前を"リスト0"、[複数選択]プロパティを"標準"とし、各項目にはテーブル名が設定されているものとします。
|
Dim iintLoop As Integer
With Me!リスト0
'リストボックスで選択されている項目を
'チェックするループ
For iintLoop = 0 To .ListCount - 1
If .Selected(iintLoop) Then
'項目が選択されていたら開く
DoCmd.OpenTable .ItemData(iintLoop),
acViewDesign
End If
Next iintLoop
End With |
|
一方、異なるオブジェクトの場合には、あらかじめそのオブジェクト名がどの種類のオブジェクトであるかを判別できるようにしておく必要があるでしょう。例えばリストボックスを使うのであれば2列目にオブジェクトの種類をセットしておきます。
|
Dim iintLoop As Integer
With Me!リスト0
'リストボックスで選択されている項目を
'チェックするループ
For iintLoop = 0 To .ListCount - 1
If .Selected(iintLoop) Then
'項目が選択されていたら開く
'2列目のオブジェクトの種類で分岐
Select Case .Column(1, iintLoop)
Case "テーブル"
DoCmd.OpenTable .ItemData(iintLoop), acViewDesign
Case "クエリー"
DoCmd.OpenQuery .ItemData(iintLoop), acViewDesign
Case "フォーム"
DoCmd.OpenForm .ItemData(iintLoop), acDesign
End Select
End If
Next iintLoop
End With |