ACCESS InputBoxのキャンセルでエラーを出さない方法

ACCESSではInputBox関数を使ってユーザーへの入力を求め、その結果を次の処理に利用することが可能です。
しかし、入力を途中でキャンセルされてしまうと、次工程で入力値を利用する前提としていた処理で下記のようなエラーが出てしまうことがあります。

これではユーザーも困ってしまいますね。
InputBoxを利用する際には、キャンセルされてもこうしたVBAのエラーが出ないように考慮しておきましょう。
今回は、InputBoxのキャンセルでエラーを出さない方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。
InputBoxのキャンセル検知方法
InputBoxでユーザーがキャンセルした際にエラーを出さないようにするためには、まずキャンセルを検知する必要があります。
その際に利用できるのが、StrPtr関数です。
StrPtr関数は、引数に指定された文字列のアドレスを返す関数です。
StrPtr関数の構文は以下の通りです。
StrPtr ( 値 )
InputBoxの戻り値(入力値)をStrPtr関数の引数に指定すると、キャンセルされた場合には値が0になります。
これを利用してInputBoxの入力がキャンセルされたかを判別するのです。
InputBoxのエラーを回避するプロシージャの書き方
では、上記のStrPtrを利用して、InputBoxでのエラーを回避するプロシージャを作成してみましょう。
Dim seikyu_bi as Date
'請求日指定
seikyu_bi = InputBox("請求日を入力してください。", "請求日入力", Date)
'入力キャンセル
If StrPtr(seikyu_bi) = 0 Then
MsgBox "入力がキャンセルされました。", vbInformation + vbOKOnly, "入力キャンセル"
Exit Sub
End If
上記は、seikyu_biという変数に、InputBoxで入力された値を格納するプロシージャです。
まず最初に
seikyu_bi_tmp = InputBox("請求日を入力してください。", "請求日入力", Date)
でseikyu_biという変数にInputBox関数で入力された値を格納します。
その後、
If StrPtr(seikyu_bi_tmp) = 0 Then
の部分でStrPtr関数を使って、seikyu_biに入力された値を判定します。
StrPtrの結果が0、つまり、InputBoxでキャンセルされていた場合は、
MsgBox "入力がキャンセルされました。", vbInformation + vbOKOnly, "入力キャンセル"
Exit Sub
でメッセージを出しつつ、Exit Subで処理を中断しています。
実際にキャンセルをすると以下のメッセージが表示されます。

このように、StrPtr関数を使ってInputBoxでのキャンセルを検知してエラー処理ルーチンを作成すれば、ユーザーにとってもわかりやすいシステムを構築可能です。
このあたりまで考慮してシステムを作れるとよいですね。
以上、InputBoxのキャンセルでエラーを出さない方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。