Excel VBA の実行時エラー辞典
実行時エラー '449':引数はオプションではないか、プロパティの割り当てが無効です
呼び出した関数・プロシージャ・メソッドの必須の引数を、省略していないか確認します。
よくある原因
- Left・Mid などの関数で、必須の引数を書き忘れています。
- 自作の Sub や Function を呼ぶとき、Optional ではない引数を省略しています。
- Object 型の変数からメソッドを呼んでいるため、引数の不足が実行するまで分かりません。
直し方
- 停止した行で呼び出している関数・プロシージャ名を確認し、定義や資料で必須の引数を数えます。
- 必須の引数をすべて渡します。自作のプロシージャで省略を許す場合は、定義側の引数に Optional と既定値を付けます。
- Object 型で受けている変数は、可能なら Worksheet・Range など具体的な型で宣言し、コンパイル時に確認できるようにします。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
税率を省略できるようにした例です。この例は実行前にコンパイル エラーとして表示される場合があります。端数の切り捨ては説明用で、実際の計算規則に合わせてください。
修正前
Function TaxIncluded(price As Long, rate As Double) As Long
TaxIncluded = Int(price * (1 + rate))
End Function
Sub ShowPrice()
Debug.Print TaxIncluded(1000)
End Sub
修正後
Function TaxIncluded(price As Long, Optional rate As Double = 0.1) As Long
TaxIncluded = Int(price * (1 + rate))
End Function
Sub ShowPrice()
Debug.Print TaxIncluded(1000)
Debug.Print TaxIncluded(1000, 0.08)
End Sub
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 呼び出し先の名前の上で Shift+F2 を押して定義へ移動し、引数の並びと Optional の有無を見比べます。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? TaxIncluded(1000, 0.1)
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。
関連エラー
- 実行時エラー '5':プロシージャ呼び出しが正しくありません
- 実行時エラー '438':オブジェクトは、このプロパティまたはメソッドをサポートしていません
- 実行時エラー '450':引数の数が一致していません。または無効なプロパティを指定しています