#119 省略可能な引数を持つプロシージャの作り方 VBA

省略可能な引数を持つプロシージャの例として、フォームを開く際に用いる、DocmdオブジェクトのOpenFormメソッドがあります。このメソッドの構文は次のようになっており、2番目以降の任意の引数を省略することができます。

構文:  ※[ ]で囲まれた部分はどれでも省略することができます。
  DoCmd.OpenForm formname[,view][,filtername][,wherecondition]
                                            [,datamode][,windowmode][,openargs]

使用例:
'2番目の引数以降、すべてを省略
DoCmd.OpenForm "商品一覧フォーム"
'3・4・6・7番目の引数を省略
DoCmd.OpenForm "商品一覧フォーム", acDesign, , , acFormAdd
'2〜5・7番目の引数を省略
DoCmd.OpenForm "商品一覧フォーム", , , , , acDialog

このような、省略可能な引数を持つプロシージャは、オリジナルのプロシージャにも適用することができます。それには、次の2点に注意してプロシージャを記述します。
  1. 引数を Optional かつ バリアント型で宣言する
  2. 引数が省略されたかどうかは IsMissing関数 を使って確認する

次の例は、上記のOpenFormメソッドをカスタム化したものです。

サンプルプロシージャ:
Sub cst_OpenForm(strFrm As String, Optional View As Variant, _
                                Optional Windowmode As Variant)

  Dim varViewType As Variant
  Dim varWinMode As Variant
  
  'ビュータイプの設定
  If IsMissing(View) Then
    'View引数が省略されていたら、既定値としてacNormalを設定します
    varViewType = acNormal
  Else
    varViewType = View
  End If
  
  'ウィンドウスタイルの設定
  If IsMissing(Windowmode) Then
    'Windowmode引数が省略されていたら、既定値としてacWindowNormalを設定します
    varWinMode = acWindowNormal
  Else
    varWinMode = Windowmode
  End If
  
  'フォームを開きます
  DoCmd.OpenForm strFrm, varViewType, , , , varWinMode

End Sub

使用例:
'普通にフォームを開きます
cst_OpenForm "商品一覧フォーム"
'デザインビューでフォームを開きます
cst_OpenForm "商品一覧フォーム", acDesign
'ダイアログでフォームを開きます
cst_OpenForm "商品一覧フォーム", , acDialog
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved