ACCESS VBA フォームを閉じる方法

フォームを閉じる方法

ACCESSで必ず発生するフォーム操作と言えば、フォームを閉じる操作です。
今回は、VBAでDoCmdオブジェクトのCloseメソッドを使ってフォームを閉じる方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

構文

フォームを閉じるCloseメソッドは以下の構文で使用します。

DoCmd.Close

非常に単純ですね。
これを記述するだけで、現在アクティブになっているフォームを閉じることができます。

フォームを閉じる

では実際のフォームで使ってみましょう。
今回は以下のフォームを準備しました。

右下に「閉じる」ボタンがありますので、このボタンを押してフォームを閉じるように設定したいと思います。

フォームをデザインビューで開き、閉じるボタンのクリック時にイベントプロシージャを設定します。

イベントプロシージャには以下のように記載します。


 Private Sub 閉じる_ボタン_Click()

    DoCmd.Close
  
 End Sub
 

これだけで、ボタンを押すとフォームを閉じる機能を実装できます。

フォームを指定して閉じる

なお、DoCmd.Closeだけで利用する場合はアクティブなフォームを自動的に閉じます。
フォームに閉じるボタンを設置している場合は、ボタンを押すことで該当のフォームが自動的にアクティブになるのでこれで問題無いでしょう。

一方でアクティブでないフォームを閉じる際にはフォーム名の指定が必要です。
例えば「T_Close」というフォームを閉じる場合には以下のように記述します。


 DoCmd.Close acForm, "T_Close"
 

途中にフォームを指定する「acForm」が引数として入ることに注意してください。

フォームを閉じる際に条件分岐する

フォームを閉じる際に、フォームの入力チェックを行うことも可能です。
先ほどの、「閉じる」ボタンのクリック時イベントをIF文で条件分岐させ、条件を満たさない場合はフォームを閉じられなくします。

例えば、先ほどのサンプルで顧客名を選択していないとフォームを閉じられないようにするには以下のように記述します。


Private Sub 閉じる_ボタン_Click()

If Me!顧客ID = 0 Then

    MsgBox("顧客が選択されていません。", vbOkonly + vbCritical, "顧客未選択")
    Exit Sub

Else

    DoCmd.Close

End If
  
End Sub
 

ここでは、顧客IDが0、つまり顧客が選択されていない場合にはメッセージを表示した上でExit Subを使ってイベントプロシージャを終了させます。つまり、フォームを閉じないということです。

一方で、顧客IDが0でなければ問題なくフォームを閉じます。

こうした条件分岐による入力チェックを入れるには、フォームを閉じるボタンは最適です。

ボタン以外でフォームを閉じられないようにする

しかし、フォームを閉じるボタンを押した際に入力チェックを入れたとしても、Windowsの機能(右上の×ボタン)でフォームを閉じられてしまってはチェックができません。

ACCESSではこれを防ぐことが可能です。
フォーム全体を選択した上でプロパティシートを表示し、「書式」タブの「閉じるボタン」を「いいえ」にします。

これを行うことで、フォームの×ボタンが非活性になり、閉じるボタン以外でフォームを閉じることができなくなります。

右上の×が非活性になっている

ユーザーの操作方法を制御する目的でよく使われる機能ですので覚えておいて損はないでしょう。

以上、フォームを閉じる方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

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