Home > 即効テクニック > Excel VBA > ウィンドウ操作関連のテクニック > InputBox関数でキャンセル処理を正しく行う

即効テクニック

ウィンドウ操作関連のテクニック

InputBox関数でキャンセル処理を正しく行う

(Excel 2000/2002/2003)
●概要●
InputBox関数を利用して、ユーザーに文字列を入力させる処理があるとします。このとき、Sample1のコードの場合、入力ダイアログボックスに何も入力せずに[OK]ボタンをクリックしても、Ifステートメントの条件式はTrueになってしまい、想定している動作と異なる動作の原因になる場合があります。このような場合、StrPtr関数を利用すると、正しく処理を分岐することができます。

 構文 StrPtr(Ptr As String) As Long

 設定項目   内容
 Ptr      文字列型のデータを指定

InputBox 関数は、[キャンセル]ボタンをクリックしたときには、値0の文字列を返します。StrPtr関数は、引数にvbNullString(値0の文字列)を指定したときのみ、0を返します。そこで、Sample1のコードを、Sample2のように修正します。これで、[キャンセル]ボタンをクリックした場合の処理を正確に行うことができるようにな
ります。
●サンプル1●
Sub Sample1()
    Dim returnData As String
    
    returnData = InputBox("データを入力")
    
    If returnData = "" Then
        MsgBox "キャンセルされました"
        Exit Sub
    Else
        MsgBox "データが入力されました"
    End If
End Sub
●サンプル2●
Sub Sample2()
    Dim returnData As String
    
    returnData = InputBox("データを入力")
    
    If StrPtr(returnData) = 0 Then
        MsgBox "キャンセルされました"
        Exit Sub
    Else
        MsgBox "データが入力されました"
    End If
End Sub
●ポイント●
StrPtr関数は、非表示メンバです。オブジェクトブラウザの[クラス]ボックスで、右クリックし、[非表示のメンバを表示]をクリックすることで、確認することができます。