このサイト・インストラクターのネタ帳のアクセスログを眺めていて、
「application inputbox range 判定」
という検索キーワードでのアクセスがあることに気づきました。
Excel VBA(Visual Basic for Applications)の、Application.InpuBoxメソッドで、
指定されたのがRangeオブジェクトかどうかを判定するには、どのようなコードを書けばいいのかを探していらしたのでしょうか。
Application.InputBoxメソッドの戻り値をRangeに限定するサンプルマクロ
参考になりそうな、簡単なSubプロシージャをご紹介しておきます。
Dim rng As Range
On Error Resume Next
Set rng = Application.InputBox( _
Prompt:="セルを選択してください。", _
Type:=8)
On Error GoTo 0
If rng Is Nothing Then Exit Sub
End Sub
上記のプロシージャを実行すると、
「セルを選択してください。」
というインプットボックスが表示され、セルを指定すると、
「Range」
とメッセージボックスに表示されます。
サンプルマクロの解説
ApplicationオブジェクトのInputBoxメソッドの引数・Typeに「8」を指定しているので、インプットボックスで指定できるのは、セル参照か、セルと判定できる「A1:A5」のような文字列だけです。
セルと判定できない文字列が指定された場合には
「入力した参照が正しくないか、または必要な参照が入力されていません。マウスを使って参照を入力するには、入力先のボックスをクリックし、参照するセルをクリックするか、または選択する範囲をドラッグしてください。」
というメッセージが表示されます。
「application inputbox range 判定」
という検索キーワードでしたので、オブジェクト変数・rngを引数に指定したTypeName関数の戻り値をメッセージボックスに表示しています。
MsgBox TypeName(rng)
キャンセル時の対応
引数・Typeを「8」にすれば、Application.InputBoxメソッドで指定できるのは、セルに限定できますが、以下のようなプロシージャでは、
Sub samp() Dim rng As Range Set rng = Application.InputBox( _ Prompt:="セルを選択してください。", _ Type:=8) End Sub
キャンセル時に、
「実行時エラー'424' オブジェクトが必要です。」
という実行時エラーが発生しています。
これを回避するために、
Set rng = Application.InputBox( _ Prompt:="セルを選択してください。", _ Type:=8)
の前に、
On Error Resume Next
を入れ、オブジェクト変数・rngが初期値のNothingのままかどうかという判定を入れています。
If rng Is Nothing Then Exit Sub
Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » Application.InputBoxメソッドでRangeだけを