プロが教える店舗&オフィスのセキュリティ対策術

VBAで引数をありでもなしでもできるようにするために
optionalというものがあります

例えば

sub aaa(bbb, optional ccc)
という使い方がされます。


sub aaa(bbb, optional ccc())

のようにして配列を引数として渡そうとするとエラーが発生してしまいます。

http://officetanaka.net/excel/vba/statement/Func …

このページによれば
ParmArrayを付けると、配列でも省略可能なものとして指定できるそうなのですが
functionではうまくいくのですが
subでやるとやはりエラーが出てしまいます。

VBAの仕様ではsubで配列を省略可能として使うことはできないのでしょうか?

A 回答 (3件)

http://excelwork.info/excel/paramarray/
上記参照URLによると、Paramarrayを使う場合はVariant型配列として宣言する必要があるそうです。
どこの誰が書いたかもわからんページですが。。。
    • good
    • 0

こんばんは。



>VBAの仕様ではsubで配列を省略可能として使うことはできないのでしょうか?
既存の仕様そのものを変えようとするよりも、それに対応させればよいのではないでしょうか。

>Sub aaa(bbb, Optional ccc)
>という使い方がされます。

もちろん、パラメータ配列を引数にすることも可能ですから、パラメータ配列にするということもありますが、Variant型の引数で、配列も受けられるのですから、それで問題ということはないはずです。

それとも、何か不都合があるのでしょうか。

サンプル
'//
Sub Test1()
Dim a, b
 a = 2
 b = Array(1, 2, 3, 4)
 TestArray a, b
End Sub

Sub TestArray(a, Optional b)
Dim c, n
If VarType(b) = vbArray Or vbVariant Then '配列の場合
 For Each n In b
  c = c + a * n
 Next
 MsgBox c
Else
   '***** 'そうでない場合
End If
End Sub
'///
    • good
    • 0

sub aaa(bbb, ParamArray ccc())


でも、駄目ですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A