#670 プロパティがあるかどうか調べるサンプルプロシージャ VBA

これはアプリケーションの処理としてはあまりないかもしれませんが、データベースの作成作業において、VBAのプログラムを使って複数のフォームやレポートあるいはその中に配置された複数のコントロールのプロパティを一度に検索したり、一括置換したりといったときに使えるサンプルプロシージャです。

たとえば、「Caption/標題」というプロパティは、フォームやラベルコントロールにはありますが、テキストボックスコントロールにはありません。テキストボックスの「.Caption」を参照しようとするとエラーが発生します。

そのようなときは、あらかじめ”ラベルだったら”プロパティ値を参照し、”テキストボックスだったら”参照しないといった分岐処理で回避することもできます。しかしこのプロシージャで事前チェックすることによって、そのような判断やプロパティの有無を事前に知っておく必要もありません。

下記のサンプルプロシージャでは、第1引数に指定したオブジェクトが、第2引数に指定した名前のプロパティを持っていればそのプロパティ値を、持っていなければNullを返します。

Public Function IsHaveProp(obj As Object, strPropName As String) As Variant

  On Error Resume Next
  IsHaveProp = obj.Properties(strPropName)
  If Err.Number > 0 Then
    IsHaveProp = Null
    Err.Clear
  End If

End Function


■呼び出し例



■プロパティを一括置換するときの使用例
次の例では、「frm仕入先」フォーム内の種類を問わずすべてのコントロールを調べ、「Caption/標題」プロパティを持っているコントロールについて、標題の中の文字列を『”会社名”→”取引先名”』に一括置換しています。

Sub Sample()

  Dim ctl As Control
  Dim varCaption As Variant

  'frm仕入先のすべてのコントロールを調べる
  For Each ctl In Forms!frm仕入先
    'Captionプロパティを取得
    varCaption = IsHaveProp(ctl, "Caption")
    If Not IsNull(varCaption) Then
      'Captionプロパティがあったら置換する
      ctl.Caption = Replace(varCaption, "会社名", "取引先名")
    End If
  Next ctl

End Sub

実行例:
  • 実行前

  • 実行後
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved