省略可能なオブジェクト型の引数のデフォルト値
省略可能な引数
プロシージャに省略可能な引数を設定するときには、
Public Sub hogeHoge(Optional ByVal foo As String = "ち~んw")
というふうに書く。
引数名の指定の最初に「Optionalキーワード」を付けて省略可能であることを示し、最後に「 = ~~」の形でデフォルト値を設定することができる。
ここまではまあ、たいていの人が知っているだろう。
じゃ、引数がオブジェクト型だったらどうすんのさ?
普通に書いてみる
とりあえず、
前回作成したFunctionはWorksheetオブジェクトが引数だったので、こいつを使う。
引数指定がない場合は、アクティブシートを渡す、という形にする。
まず、プロシージャの宣言の部分を
Public Function isAutoFiltered(Optional ByVal targetSheet As Worksheet = ActiveSheet) As Boolean
と書いてみる。
とりあえず、逐次コンパイルには引っかからない。
しかし、実行すると、
コンパイルエラーwww
ま、当たり前ですけどね。
Public Function isAutoFiltered( _ Optional ByVal targetSheet As Worksheet Set targetSheet = ActiveSheet) _ As Boolean
こうも書いてみたけれど、これはもう逐次コンパイルに引っかかるレベルでダメw
結局、次のようになった。
リスト1
Public Function isAutoFiltered(Optional ByVal targetSheet As Worksheet) As Boolean If targetSheet Is Nothing Then Set targetSheet = ActiveSheet If targetSheet.AutoFilter.FilterMode Then isAutoFiltered = True End Function
引数が省略されると、targetSheetがNothingになるので、プロシージャの先頭でActiveSheetをセットするようにしただけ。
おわりに
先頭のカッコ内(引数指定のところ)でデフォルト値を設定する方法もあるのだろうか???