VBAを実行するとVBA エラー 5「プロシージャの呼び出し、または引数が不正です。」を見る機会はありませんか?
コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。
そんな中で悩むことは、
・VBA エラー 5「プロシージャの呼び出し、または引数が不正です。」の対処はどうすればよい?
ではないでしょうか?
今回は、
についてまとめます!
もくじ
VBA エラー 5「プロシージャの呼び出し、または引数が不正です。」はどんなエラー?
VBA エラー 5はVBA関数でその引数が制限値を超えた場合にエラーが発生します。
ちょっとわかりづらいですが、もともと関数で設定していた規定外の値を入れた場合に、
「そんなところ参照できないよ」と
回答するものだと思ってください。
VBA エラー 5の原因①「引数に設定できる値の制限値を超えたため」
上記の通り、引数に設定できる値の制限値を超えたことがエラーの発生原因となります。
文字列の左側から指定した文字数を取り出すLeft関数でエラーを再現してみましょう。
まずエラーなしです。
エラーなし
Sub エラーテスト1()
Dim strLEFT
strLEFT = LEFT("890-0054", 3)
MsgBox strLEFT
End Sub
左側3文字が取得できましたね。
続いてエラーを出してみます。
文字取得の開始の位置に-1番目を指定します。
エラーあり
Sub エラーテスト1()
Dim strLEFT
strLEFT = LEFT("890-0054", -1)
MsgBox strLEFT
End Sub
はい、出ましたね。
存在しない番地を指定したために
「そんなのないよ」と
返された形になります。
VBA エラー 5の原因①「引数に設定できる値の制限値を超えたため」の対処方法は引数に設定した値を制限値以内にする
VBA エラー 5の原因①「引数に設定できる値の制限値を超えたため」の対処方法は、
引数の制限を超えていないかを確認します。
以下はエラー5が発生する代表的なVBA関数です。
Mid関数:第二引数は1以上、第三引数は0以上が設定条件で、それ以外の場合にエラー5が発生します。
Left関数:第二引数は0以上が設定条件で、それ以外の場合にエラー5が発生します。
Right関数:第二引数は0以上が設定条件で、それ以外の場合にエラー5が発生します。
Dir関数:Dir関数の第一引数には検索するパスを指定していない場合にエラー5が発生します。
WeekDayName関数:引数に1から7の範囲が設定条件で、それ以外の場合にエラー5が発生します。
DateDiff関数:第一引数に日付形式として読み取れない場合にエラー5が発生します。
InStr関数:検索元の文字列から検索ワードが最初に見つかった位置を取得しますが、検索キーの第二引数が存在しない場合にエラー5が発生します。
VBA エラー 5の原因②「フォルダーへの書き込み権限が不足しているため」
プログラムの実行権限もしくは、フォルダーへの書き込み権限が不足しているため、
プログラムの起動時にエラーが発生する場合があります。
「ファイルのパスは指定通りいったけど、その中のファイルの変更ができないよ」
と言われているものと思ってください。
VBA エラー 5の原因②「フォルダーへの書き込み権限が不足しているため」の対処方法はフォルダーへの書き込み権限を確認し設定する
フォルダーへの書き込み権限を確認し設定しましょう。
手順は以下の通りです。
書き込み権限設定の手順
①設定したい共有フォルダ右クリックしプロパティを選択。
②セキュリティタブを選択し、編集を選択。
③変更権限を付けたいユーザを選択。
④アクセス許可の部分の変更にチェックを入れて、OKを選択。
VBA エラー 5の原因③「有効でないプロシージャを呼び出しているため」
プロシージャとはVBAの関数のことですね。
処理をひとかたまりにまとめたオブジェクトをさします。
種類は戻り値のある
Functionプロシージャ
と戻り値のない
Subプロシージャ
の二種類です。
それらのプロシージャを呼び出し、有効でない場合にエラー5が発生します。
MicrosoftのVBAリファレンスですと、以下の場合となります。
たとえば、プロシージャの中には、Microsoft Windows でのみ有効なもの、Macintosh でのみ有効なものなどがあります。
プロシージャに関するプラットフォーム固有の情報を確認してください。
参考:https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/invalid-procedure-call-or-argument-error-5
Mac固有のプロシージャということで、具体的になにかまでは確認できませんでした。
なお、有効でないということの解釈ですが、存在しない場合は該当せず、
存在しないプロシージャをCallした場合は、
「コンパイルエラー Sub または Function が定義されていません。」
が表示されます。
VBA エラー 5の原因③「有効でないプロシージャを呼び出しているため」の対処方法は有効なプロシージャを設定する
対処としては、VBAライブラリを確認し、
有効なプロシージャを設定しましょう。
さいごに
今回は、
についてまとめました。
VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、
しっかりと対処方法を把握するようにしておきたいですね!
コメントを残す