|
ご存知のようにデータベースウィンドウには「名前」の他にもいくつかの情報が表示されています。このうち、「更新日時」と「作成日時」については「名前」と同じような方法で取得することができます。それぞれDocumentオブジェクトの[LastUpdated]プロパティ、[DateCreated]プロパティを使用します。
例えばフォームであれば右のようなコードになります。
|
Dim dbs As Database
Dim ctn As Container
Dim doc As Document
Set dbs = CurrentDb
Set ctn = dbs.Containers!Forms
For Each doc In ctn.Documents
With doc
Debug.Print .Name '名前
Debug.Print .LastUpdated '更新日時
Debug.Print .DateCreated '作成日時
End With
Next doc |
|
ところが、「説明」についてはちょっと異なるアプローチが必要です。ここではその取得と更新について、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
Debug.Print .Name・・・・・・<1>
Debug.Print .Properties("Name")・・・・・・<2>
Debug.Print .Properties!Name・・・・・・<3>
End If
End With
Next tdf |
<1>、<2>、<3>はまったく同じ値を返してくれます。この関係を図示すると下図のようになります。
tdf(TableDefオブジェクト)はいくつかのプロパティやメソッドを持っています。そのプロパティに対して
オブジェクト名.プロパティ名 の形で直接参照したものが<1>です。一方これらのプロパティの集まりが[Properties]コレクションです。このコレクションは tdf に内包されていて、それを『tdfの中の、プロパティの集まりの中の、○○○○プロパティ』という形で段階的に参照したものが<2>と<3>です。[Name/名前]プロパティについてはいずれの方法でもそのプロパティ値を参照することができます。 |
|
ここで話しを「説明」プロパティに戻してみましょう。結論をいうと、[Description/説明]プロパティは<1>の方法では参照できず、<2>や<3>の方法だけを受け付けてくれます。
これを踏まえて前述のコードを手直ししてみましょう。
Dim dbs As Database
Dim ctn As Container
Dim doc As Document
Set dbs = CurrentDb
Set ctn = dbs.Containers!Forms
For Each doc In ctn.Documents
With doc
Debug.Print .Name '名前
Debug.Print .LastUpdated '更新日時
Debug.Print .DateCreated '作成日時
Debug.Print .Properties!Description '説明
End With
Next doc
|
これで「説明」の内容が取得できるはずです。テーブルやクエリーやレポートなどについても「#01
MDBオブジェクト一覧を取得する」のコードに同様の追記を行えばOKです。
さて、左記のコードでエラーは発生しなかったでしょうか?。もしもデータベースウィンドウで「説明」が空欄になっているとそのオブジェクトでエラーが発生したはずです。<1>の方法で取得できるプロパティについては、仮にそれが設定されていなくても
NULL や""(長さゼロの文字列) が返されますが、<2>や<3>の方法で参照しなければならないプロパティは「プロパティそのものがない」エラーとなってしまうのです。ここでは
On Error Resume Next やその他の方法でエラーを回避する必要があります。
|
|
最後に[Description/説明]プロパティを更新する方法を説明します。
まず、すでにある説明の内容を別の内容に書き換えるには、
doc.Properties!Description = "新しい説明文です"
のようにすればよいので、特に解説は要らないでしょう。
しかし、「説明」が空欄であるオブジェクトに対して新たに説明文を書き込むには、[Description/説明]プロパティそのものも作成する必要があります。プロパティを作成するには[CreateProperty]メソッドを使います。1番目の引数には作成するプロパティ名を、2番目の引数にはプロパティのデータ型を、そして3番目の引数にはプロパティ値を設定します。さらに、プロパティを作成したら
[Appendprp]メソッドで[Properties]コレクションに追加します。 |
Dim dbs As Database
Dim ctn As Container
Dim doc As Document
Dim prp As Property
Set dbs = CurrentDb
Set ctn = dbs.Containers!Forms
For Each doc In ctn.Documents
With doc
Set prp = .CreateProperty("Description", _
dbText, "新しい説明文です")
With .Properties
.Append prp
.Refresh
End With
End With
Next doc
|