エラー内容
VBAコンパイル時に、「引数の数が一致していません。または不正なプロパティを指定しています。」と表示される。
原因と解決方法
2つの原因と、その解決方法が考えられます。
原因1. 引数の数が多すぎる
解説
プロシージャの引数が多すぎるのが原因です。
1 2 3 4 5 6 7 |
Sub ErrSample26_01() MsgBox Mid("あいうえお", 2, 3, 4) End Sub |
解決方法
プロシージャの引数を調べて、修正しましょう。
プロシージャの引数の調べ方は、次の3つです。
1.ネットやヘルプ
Yahoo知恵袋、個人サイト、公式サイトなど。
2.自動クイックヒント
(プロシージャ入力後、スペースキーを押下すると表示されます)
3.オブジェクトブラウザ
(コード上で対象のプロシージャを選択状態にし、右クリック→「定義」をクリックすると表示されます)
Mid関数の場合は、Mid(String, Start As Long, [Length])が正しい書式なので、引数は3つです。
Mid関数は、文字列の指定したスタート位置から、指定した文字数の文字列を抜き出します。
引数の定義はつぎのようになります。
String:対象の文字列
Start:スタート位置
Length:取り出す文字数
1 2 3 4 5 6 7 |
Sub ErrSample26_01() MsgBox Mid("あいうえお", 2, 3) End Sub |
原因2. 引数が異なる同名プロシージャを定義
解説
VBAで準備されているプロシージャと同じ名前のプロシージャを作成していることが原因です。
サンプルソースでは、VBAのLeft関数を呼び出したかったのに、自作したLeft関数があるため、そちらを呼び出していることになっています。
なので、自作Left関数の引数と数があっていないのでエラーとなっています。
Left関数を呼び出している箇所MsgBox Left(“あいうえお”, 3)だけを見ていると、このエラー原因に気づけないんですよね・・・
パッと見た時、VBAのLeft関数だったら引数が正しいんで。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ErrSample26_02() MsgBox Left("あいうえお", 3) End Sub Function Left(moji As String) '←VBAのLEFT関数と同名 Left = moji End Function |
解決方法
VBAで準備されているプロシージャを使用したい場合は、頭にVBA.をつければ使用できます。
ただ、エラーの元になるので特に理由がない限り、自作するプロシージャは、VBAで準備されているプロシージャとは違う名前にした方がいいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ErrSample26_02() MsgBox VBA.Left("あいうえお", 3) End Sub Function Left(moji As String) '←VBAのLEFT関数と同名 Left = moji End Function |