即効テクニック |
マクロ実行中にユーザーからデータを受け取るときは、InputBoxが便利です。Sub Sample1() Dim buf As String buf = InputBox("名前を入力してください") MsgBox buf End Subただし、上記のSample1では、ユーザーが[キャンセル]ボタンをクリックした場合を想定していません。 [キャンセル]ボタンがクリックされるとInputBoxは空欄を返すので次のように判定できます。Sub Sample2() Dim buf As String buf = InputBox("名前を入力してください") If buf = "" Then MsgBox "キャンセルされました" Else MsgBox buf & "が入力されました" End If End Sub一般的には「キャンセルされたかどうか」を「返り値が空欄かどうか」で判定できれば十分ですが、ケースによっては「キャンセルされた」動作と「空欄のまま[OK]ボタンがクリックされた」動作を区別したい場合もあります。 そんなときは、上記Sample1やSample2で使った「InputBox関数」ではなく、Applicationオブジェクトの「InputBoxメソッド」を使います。Sub Sample3() Dim buf As String buf = Application.InputBox("名前を入力してください") Select Case buf Case "False" MsgBox "キャンセルされました" Case "" MsgBox "空欄が入力されました" Case Else MsgBox buf & "が入力されました" End Select End SubApplicationオブジェクトのInputBoxメソッドは、[キャンセル]ボタンがクリックされるとFalseを返します。 もちろん、上記のSample3では、ユーザーが「False」という文字列を入力して[OK]ボタンを押した場合も「キャンセルされた」と認識します。 多くの場合はそれでも十分ですが、もっと厳密に判定したいときは、返り値の型を次のように判定すればいいでしょう。 返り値を受け取る変数bufを、バリアント型で宣言している点に留意してください。Sub Sample4() Dim buf As Variant buf = Application.InputBox("名前を入力してください") If VarType(buf) = vbBoolean Then MsgBox "キャンセルされました" Else MsgBox buf & "が入力されました" End If End Sub