エラー内容
エラー5(プロシージャの呼び出し、または引数が不正です)は、関数を呼び出す際に、渡している引数がおかしいことを示すエラーです。
エラー原因
エラー5が発生する原因は、Mid関数などのVBA関数を使用した場合に引数に設定できる値に制限があるもので、その制限値を超えた値が設定されるためです。
自作関数では例外を発生させる実装は出来ませんが、VBA関数には引数に許容しない値が設定されると例外が発生するものがあります。
例えば、Mid関数は引数が3つありますが、文字列の検索開始位置である第二引数が1以上、または、開始位置からの検索文字数である第三引数が0以上でない場合は例外が発生し、エラー5を表示します。
以下は第二引数と第三引数が不正のため例外が発生し、エラー5が発生します。
1 2 3 4 |
Sub Err5Test() Dim s s = Mid("abc", 0, -1) End Sub |
同様に、Dir関数でもエラー5が発生します。
Dir関数の第一引数には検索するファイルやフォルダのパスを指定します。検索で見つからなかった場合は””を返します。検索で見つかった場合はそのファイル名やフォルダ名を返します。
2回目以降の検索で第一引数を省略すると、””が返却されるまで、前回設定した検索パスで検索が実行されます。””が返却された場合は再度検索パスを指定しなければなりません。
以下は””が返却されたあとに検索パスを指定していないためエラー5が発生します。
1 2 3 4 5 6 7 8 9 |
Sub Err5Test2() Dim sPath '// 存在しないファイルを検索すると、""が返却される sPath = Dir("C:\abcdefg\aaa.txt") '// ""返却後は再度Dir関数の引数が必要だが未指定だとエラー5が発生する sPath = Dir End Sub |
エラー対応方法
エラー5が起きるのはVBA関数の引数の設定が誤っていることがほとんどです。
使用するVBA関数の引数が許容している値を設定するように修正することで対応します。
以下はエラー5が発生する代表的なVBA関数を挙げています。引数の制限を超えていないかを確認して対応してください。
- Mid関数:第二引数は1以上、第三引数は0以上が設定条件です。それ以外を指定するとエラー5が発生します。
- Left関数:第二引数は0以上が設定条件です。それ以外を指定するとエラー5が発生します。
- Right関数:第二引数は0以上が設定条件です。それ以外を指定するとエラー5が発生します。
- Dir関数:2回目以降の検索で前回検索で””が返却されている場合に引数省略するとエラー5が発生します。
- WeekDayName関数:引数に1から7の範囲が設定条件です。それ以外を指定するとエラー5が発生します。
- DateDiff関数:第一引数は”yyyy”, “m”, “d”, “ww”, “w”, “q”, “y”, “h”, “n”, “s”のいずれかが設定条件です。それ以外を指定するとエラー5が発生します。