エラー内容
VBAコンパイル時に、「名前付き引数が見つかりません。」と表示される。
原因と解決方法
2つの原因と、その解決方法が考えられます。
原因1. スペルが間違っている
解説
プロシージャの名前付き引数のスペルが間違っている、これが1番の原因です。
サンプルソースでは、プロシージャMagBoxの名前付き引数が Titl となっているのが原因です。
1 2 3 4 5 6 7 |
Sub ErrSample25_01() MsgBox Titl:="お知らせ", Prompt:="今日もお疲れさまです。" End Sub |
解決方法
名前付き引数のスペルをチェックし、正しいスペルに修正します。
正しいスペルの調べ方としては、次の3つです。
1.ネットやヘルプ
Yahoo知恵袋、個人サイト、公式サイトなどいろいろな場所で調べることができます。
初心者の人には、公式サイトより個人サイトの方が噛み砕いていてわかりやすいかな。
2.自動クイックヒント
(プロシージャ入力後、スペースキーを押下すると表示されます)
3.オブジェクトブラウザ
(コード上で対象のプロシージャを選択状態にし、右クリック→「定義」をクリックすると表示されます)
サンプルソースでは、Titl → Title に修正します。
1 2 3 4 5 6 7 |
Sub ErrSample25_01() MsgBox Title:="お知らせ", Prompt:="今日もお疲れさまです。" End Sub |
原因2. 存在しない名前付き引数
解説
他のプロシージャの名前付き引数と勘違いしてる時にやってしまいます。
こういう時は、スペルミスをひたすらチェックしても、スペルは間違ってないので、なかなか原因を見つけられないんです・・・
解決方法
原因1.の時と同じように、対象のプロシージャの名前付き引数を調べ、プロシージャでは何が指定できるか確認します。
名前付き引数について
普通の引数では、決まった順番で値を指定しないといけません。
例えば、MsgBoxを例に紹介すると・・・
メッセージ内容は1番目、タイトルは3番目と位置を守る必要があります。
1 2 3 |
MsgBox "今日もお疲れさまです。", , "お知らせ" |
でも名前付き引数を使うと、引数を名前で指定し、好きな順番で設定できます。
1 2 3 |
MsgBox Title:="お知らせ", Prompt:="今日もお疲れさまです。" |
名前付き引数で値をセットする時は、=でなく:=を使います!
このように名前付き引数を使うことで、引数の順番を気にする必要がなく、設定したい引数だけを指定できます。
また、引数で何の値をセットしているかが理解しやすく、可読性が向上します。