Access超入門
フォームを閉じるボタンを追加する
作成日:2018/12/13

ページ内目次

  1. 概要
  2. 使用するVBAコード
    1. フォームを閉じるためのVBA
    2. Accessを終了するためのVBA
  3. 「F住所録一覧表」に「処理終了」ボタンを設置する
  4. 「F住所録明細」に「閉じる」ボタンを設置する

概要

ここではVBAを使用しますので予め 「この講座で使用するVBA」 を読んでおいてください。
ここでは、 開いたフォームを閉じるVBAについて解説します。

フォームを閉じる閉じるには、 オブジェクトウィンドウ 内の右端にある フォームの終了ボタン をクリックするとそのフォームは閉じます。
また、 画面右上の Accessの終了ボタン をクリックするとAccessが終了します。

Windowsの標準機能やAccessの標準機能を使えばできることを、 何故わざわざVBAを記述するようなことをしなければならないのか。
それは、 終了時に何かの処理を行いたいときや、 大きなボタンを設置することによって 利用者 にとって操作しやすいからです。
よく見かけるのが「処理を終了します。」と小窓を表示し、 「OK」や「キャンセル」を選択するように確認をとっています。

使用するVBAコード

まずは、 ここで使用するVBAについて解説します。
このコードはボタンを設置してイベントプロシージャを登録したあとで使用します。
フォームを閉じるためのVBA
フォームを閉じるためのVBAはこのように記述します。
DoCmd.Close acForm, Me.Name
上のコードをクリップボードにコピーします。
DoCmdオブジェクトのCloseメソッドを使用します。
次に「acForm」を記述します。
「acForm」はAccessのキーワードで、 フォームを意味します。
「DoCmd.Close」で「閉じなさい」、 「acForm」で「フォーム」を、 つまり「フォームを閉じなさい」ということになります。
次はどのフォームを閉じるのかと言うことをフォームの名称で指示します。
フォーム名は、 ダブルクォーテーションで囲んで(文字列を意味します)閉じるフォームの名前を指定します。
フォーム名は変数でも指定できます。
ここでは、「Me.Name」と指定しています。
「Me」は私(今開いているフォーム)のことです。
私(フォーム)のプロパティである「Name」を指定しているので、 フォームの名称ということになります。
つまり今開いているフォームの名前を表しています。
なので、 「DoCmd.Close acForm, Me.Name」のコードは、 「私(フォーム)を閉じる」ということになります。
Accessを終了するためのVBA
小窓を表示して可否を確認したあとに、 フォームを閉じてAccessも終了するためのVBAはこのように記述します。
If MsgBox("処理を終了して、Windowsに戻ります。", vbOKCancel, "終了確認") = vbCancel Then
   Exit Sub
End If
Application.Quit

上のコードをクリップボードにコピーします。

まず4行中の先頭3行から解説します。
この3行は概要であげた例に従って、 「小窓を表示して終了するか否かを選択する」となっているので入れてみました。
もちろん利用者に改めて確認することなくすぐに終了するのなら、 このコードは不要です。
この3行は超入門講座を見ている人には難しいと思いますので、 コピペで良いと思います。
一応簡単に説明しておきます。
If MsgBox("処理を終了して、Windowsに戻ります。", vbOKCancel, "終了確認") = vbCancel Then
   Exit Sub
End If
If MsgBox("処理を終了して、Windowsに戻ります。", vbOKCancel, "終了確認") = vbCancel Then
「If」は「If a = b then」の形式で、 ふたつのものを比較します。
この場合、
  aは「MsgBox("処理を終了して、Windowsに戻ります。", vbOKCancel, "終了確認") 」で、
  bは「vbCancel」
となります。
「Then」は、 比較した結果が真であれば(正しければ)「End If」までの間に記述したVBAを実行します。
比較した結果が真でなければ「Then」以降「End If」までの間は実行されずに「End If」の次からの命令を実行します。
つまりこのようになります。
If a = b Then
  ' 真であればここに記述したVBAを実行します。
  ' 真でないときは実行されません。
End If
' ここに記述したVBAは「If」の判定結果に関係なく実行されます。

「MsgBox("処理を終了して、Windowsに戻ります。", vbOKCancel, "終了確認"」
構文はこのようになります。
「MsgBox」 メッセージボックスの意味で下図の小窓を表示します。
「"処理を終了して、Windowsに戻ります。"」 小窓に表示するメッセージです。
「vbOKCancel」 小窓に「OK」と「キャンセル」のボタンを表示します。
「"終了確認"」 小窓のタイトルを指定します。

終了確認の小窓 「MsgBox("処理を終了して、Windowsに戻ります。", vbOKCancel, "終了確認")」
の「If」文の中での値は、 まず小窓を表示し、 「OK」か「キャンセル」をクリックした値になります。
「OK」をクリックするとその値は「VbOK」となり、
「キャンセル」をクリックすると「VbCancel」になります。

「Exit Sub」
このプロシージャの後ろの処理は実行せず、 プロシージャを抜けるという意味です。
この例で具体的に表現すると、
メッセージボックスで「キャンセル(VbCancel)」をクリックすると、
下の行の「Application.Quit」は実行しませんということです。

Application.Quit
Application.Quit
ApplicationオブジェクトのQuitメソッドを使用します。
このことにより、 開いているフォームの変更をすべて保存した後Accessを終了します。

フォームを閉じてAccessも終了させるためのVBAにはこのようなコードもあります。
DoCmd.Quit
上のコードをクリップボードにコピーします。
これは古いバージョンのAccessに対応するために残してあるものです。
もし、 前者の「Application.Quit」が動作するのであれば前者を使用してください。

「F住所録一覧表」に「処理終了」ボタンを設置する

開発時ではなく、 開発が完了して運用している時に、 「F住所録一覧表」フォームを閉じるというときは、 通常、 Accessも終了します。
そこで「F住所録一覧表」フォームには「処理終了」ボタンを設置します。
「F住所録一覧表」フォームに「処理終了」ボタンを貼り付ける
リボンのデザインタブ内のボタン( デザインタブのボタン )を左クリックしてボタンを選択し、
「F住所録一覧表」フォームのフッターの貼り付けたい位置で左クリックしてボタンを貼り付けます。
(ドラッグ&ドロップではありません)
ボタンコントロールの貼り付け結果 「コマンド19」と表示されているボタンが貼り付けられました。
ボタンのプロパティを変更する
「コマンド19」のプロパティシート -> 「書式」タブ -> 「標題」を「処理終了」に変更します。
「コマンド19」のプロパティシート -> 「その他」タブ -> 「名前」を「コマンド処理終了」に変更します。
プロパティ変更後の処理終了ボタン 「標題」と「名前」を変更した後の処理終了ボタン。
「処理終了」ボタンにイベントプロシージャを登録してVBAを記述する
Private Sub コマンド処理終了_Click()
  Application.Quit
End Suv
「処理終了」ボタンのプロパティシートのイベントタブにある「クリック時」の
ビルドボタン をクリックして、
表示されたクリック時イベントに「Accessを終了するためのVBA」を記述します。

結果はこのようになります。 これで、 「F住所録一覧表」フォームの「処理終了」ボタンをクリックするとAccessが収容します。
なお、 開発時に「処理終了」ボタンをクリックするごとにAccessが終了してしまうのは面倒です。
開発中はここを「フォームを閉じるVBA」に変更しておいても良いかもしれません。
この場合、 開発完了時にもとに戻すのを忘れないように注意する必要があります。

「F住所録明細」に「閉じる」ボタンを設置する

「F住所録一覧表」フォームから選択したレコードを表示するために、 「F住所録明細」フォームを開いたときは、 利用者には「F住所録明細」フォームが見えていますが、 呼び出し元の「F住所録一覧表」フォームも開いた状態になっています。
そこで「F住所録明細」フォームを閉じると「F住所録一覧表」フォームが見えるようになります。
このことからフォームを閉じるためのボタンの名前は「戻る」ボタンであっても、 「閉じる」ボタンであっても良いわけです。
どちらでも構いませんが、 ここでは「閉じる」ボタンとして設置することにします。
「F住所録明細」フォームに「閉じる」ボタンを貼り付ける
リボンのデザインタブ内のボタン( デザインタブのボタン )を左クリックしてボタンを選択し、
「F住所録明細」フォームのフッターの貼り付けたい位置で左クリックしてボタンを貼り付けます。
(ドラッグ&ドロップではありません)
住所録明細のボタンコントロールの貼り付け結果 「コマンド12」と表示されているボタンが貼り付けられました。
ボタンのプロパティを変更する
「コマンド12」のプロパティシート -> 「書式」タブ -> 「標題」を「閉じる」に変更します。
「コマンド12」のプロパティシート -> 「その他」タブ -> 「名前」を「コマンド閉じる」に変更します。
プロパティ変更後の閉じるボタン 「標題」と「名前」を変更した後の処理終了ボタン。
「閉じる」ボタンにイベントプロシージャを登録してVBAを記述する
Private Sub コマンド処理終了_Click()
  DoCmd.Close acForm, Me.Name
End Suv
「閉じる」ボタンのプロパティシートのイベントタブにある「クリック時」の
ビルドボタン をクリックして、
表示されたクリック時イベントに「フォームを閉じるためのVBA」を記述します。

結果はこのようになります。 これで、 「F住所録明細」フォームの「閉じる」ボタンをクリックすると「F住所録明細」フォームが閉じて、 「F住所録一覧表」フォームが見えるようになります。

免責
>