#08 説明プロパティの取得と更新

「#01 MDBオブジェクト一覧を取得する」では、データベースウィンドウに表示されている6つの種類のオブジェクトそれぞれの[Name/名前]を列挙しました。ここではそれに加えて各オブジェクトの[Description/説明]プロパティの取得と更新について説明します。

 
存知のようにデータベースウィンドウには「名前」の他にもいくつかの情報が表示されています。このうち、「更新日時」「作成日時」については「名前」と同じような方法で取得することができます。それぞれ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
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved