Accessフォームで閉じるボタンが表示されない原因と対処法

概要

この記事の結論
閉じるボタンが見えないときは、タブの表示設定とフォームのコントロールボックスを順に確認します。ボタンが灰色の場合は「閉じるボタン」プロパティを確認します。独自のボタンを作るときは、レコードを保存できたことを確かめてからフォームを閉じます。

この記事でわかること

  • 非表示と無効を分ける
  • タブ設定はDBを開き直して確認
  • 保存エラー時は画面を残す
  • フォーム終了とアプリ終了を分ける

この記事の主な内容

  1. 閉じるボタンの症状と対象を切り分ける
  2. タブ形式で閉じるボタンを表示する
  3. 重なりウィンドウのフォーム設定を直す
  4. 保存して閉じるボタンをフォームに作る
  5. 閉じられないときのイベントと入力エラー
  6. Runtime配布と利用者向けの終了導線
  7. よくある質問

想定読了時間:約12分~16分


閉じるボタンの症状と対象を切り分ける

閉じるボタンが見つからないときは、「×がない」「×はあるが灰色」「押せるのに閉じない」の三つに分けます。原因ごとに確認場所が異なるため、最初からすべての設定を変更するより、症状に合う項目を一つずつ確認する方が元に戻しやすくなります。

フォームとは、顧客情報などを表示・入力する画面です。Accessの外枠にも×がありますが、これはアプリ全体の終了操作です。フォームだけを閉じたい場合は、フォームのタイトルバーやオブジェクトのタブにある×、または画面内の終了ボタンを使います。

見えている状態最初に確認する場所対応の方向
×もタブも見えない現在のデータベースのタブ表示設定タブの再表示または独自ボタン
独立したフォームのタイトルバーに×がないコントロールボックス、境界線スタイルフォーム全体の表示設定
×が灰色で使えない閉じるボタンのプロパティ有効・無効の設定
押しても画面が残る入力エラー、更新前処理、Unload閉じる処理を止めている理由

変更前に再現条件を残す

業務ファイルのコピーを用意し、対象フォーム名、起動方法、表示形式、元の設定値を記録します。同じフォームでも、直接開く場合とメニューのボタンから開く場合で見え方が違うなら、起動側のマクロやVBAも調べる対象です。

本記事はWindows版Accessのデスクトップデータベースを対象にしています。画面名や×の位置はバージョンや表示方式で変わるため、同じ場所にあるはずと決めつけず、何を閉じる操作かを確認してください。

Accessの症状を三つに分けるを説明する図

タブ形式で閉じるボタンを表示する

タブ形式で画面を使っている場合、まず「ドキュメントタブを表示する」を確認します。タブを隠すと、Accessが用意するオブジェクト用の閉じるボタンも表示されなくなります。これはフォームの「閉じるボタン」を「はい」にするだけでは解消しません。参考3

データベースの表示設定を確認する

1. 対象のデータベースを開き、[ファイル]→[オプション]を選びます。

2. [現在のデータベース]を開き、[ドキュメントウィンドウオプション]を確認します。

3. タブ形式を使う場合は[タブ付きドキュメント]と[ドキュメントタブを表示する]を確認します。

4. [OK]で確定し、データベースを閉じて開き直します。

5. 対象フォームを開き、タブと閉じる操作が表示されるか確認します。

この設定は一つのフォームだけではなく、そのデータベースの画面の見せ方に関わります。既存のメニュー画面や帳票画面も開き、切り替え方が利用者の想定から変わっていないか確認しましょう。

意図的にタブを隠している場合

専用メニューで操作を完結させるシステムでは、タブ非表示が設計上の意図であることもあります。その場合は表示設定を戻すだけでなく、「メニューへ戻る」「この画面を閉じる」など、利用者が迷わないボタンをフォームに用意する方法を検討します。

一時的に閉じる操作が必要なら、アクティブなオブジェクトを確認してCtrl+F4を試す方法があります。ただし入力途中の保存やエラー処理は通常どおり発生し得ます。利用者向けの恒常的な操作としては、画面内に明確なボタンがある方が分かりやすくなります。

Accessのタブ非表示を直す手順を説明する図

重なりウィンドウのフォーム設定を直す

重なりウィンドウやポップアップで独立した枠を使うフォームは、フォーム全体のプロパティを確認します。特に「コントロールボックス」が「いいえ」だと、最小化・最大化・閉じるボタンがまとめて取り除かれます。参考2

フォーム全体を選択してから設定する

1. ナビゲーションウィンドウで対象フォームを右クリックし、[デザインビュー]で開きます。

2. F4でプロパティシートを開きます。

3. 上部の選択対象を[フォーム]にします。テキストボックスや詳細セクションではありません。

4. [書式]タブ、見つからなければ[すべて]タブで次の設定を確認します。

5. フォームを保存し、閉じてからフォームビューで開き直します。

プロパティ確認する値役割と注意点
コントロールボックスはいタイトルバーの操作ボタンを表示する前提
閉じるボタンはい×を使用可能にする。いいえは無効化
境界線スタイル細線、サイズ調整可、ダイアログなど枠を持たない設定ではタイトルバーを前提にできない
ポップアップ現在の値を記録独立表示の要件を確認し、目的なく切り替えない

「閉じるボタン」が「いいえ」の場合は、通常、×は灰色で残ります。つまり「ボタン自体が消えた」と「表示されているが押せない」は別の状態です。MicrosoftのCloseButtonプロパティの説明でも、この違いが示されています。参考1

また、フォームのモーダル設定は、他の画面へ操作を移せるかに関わる設定です。閉じるボタンを出すためだけに変更すると、入力順序やダイアログの使い方が変わる可能性があります。元の設定を控え、目的のプロパティだけを変更してください。

Accessのフォームの三つの表示設定を説明する図

保存して閉じるボタンをフォームに作る

独自ボタンを作る場合は、保存に成功してから閉じる順にします。DoCmd.CloseのSave引数は、フォームなどのオブジェクトの変更保存を指定するものです。acSaveNoを指定しても、入力中のレコードを破棄する指示にはなりません。参考4

VBAを使わずに作る方法

デザインビューの[フォームデザイン]からボタンを配置し、コントロールウィザードが有効なら、フォーム操作の中からフォームを閉じる動作を選べます。名称や分類は表示環境で異なります。作成後は[クリック時]の埋め込みマクロを開き、何を実行するかも確認します。

入力用フォームでは、閉じる動作だけでなくレコード保存とエラー時の動作を確認してください。必須項目が空欄のまま閉じたときに入力が失われないか、利用者が理由を理解できるメッセージになっているかを試します。複雑な確認が必要ならVBAで処理を明示する方法があります。

保存が失敗したら閉じないVBA例

次の例は、通常の連結フォーム自身に置くコマンドボタン用です。名前をcmdClose、標題を「保存して閉じる」とし、[クリック時]を[イベントプロシージャ]に設定します。コードはそのフォームのモジュールへ入れます。

Private Sub cmdClose_Click()
    On Error GoTo ErrHandler


    If Me.Dirty Then
        DoCmd.RunCommand acCmdSaveRecord
    End If
    DoCmd.Close acForm, Me.Name, acSaveNo
    Exit Sub


ErrHandler:
    MsgBox “保存または終了ができませんでした。” & vbCrLf & _
          Err.Description, vbExclamation, “確認”
End Sub

Dirtyは、現在のレコードに未保存の変更があるかを表します。変更がある場合に保存を要求し、必須未入力や入力規則違反などでエラーになれば、エラー処理へ進んで画面を残します。閉じる対象はMe.Nameでこのフォームに限定しています。

この例は、現在の連結フォームのレコードを対象とします。サブフォームや非連結入力欄を含む画面、独自の一括登録処理がある画面では、親子の保存順や未登録データを別途確認してください。VBAの実行環境が無効な場合は、信頼済みの業務ファイルかどうかを管理者と確認します。

Accessの保存と終了の安全な順序を説明する図

Accessの教科書でフォームの終了処理を相談する

ここまでの手順を試しても解決しない場合や、既存業務への影響を判断しにくい場合は、対象画面・現在の設定・再現手順を整理してご相談ください。Accessの教科書のお問い合わせ窓口から、状況に合う対応方法を相談できます。


閉じられないときのイベントと入力エラー

×が押せるのに閉じない場合は、表示設定を変更する前に、保存エラーやイベントを確認します。イベントとは、更新前や閉じる直前などのタイミングで動く処理です。業務上の入力チェックが意図して画面を残している可能性があります。

起きること確認先対応例
必須項目を求められるテーブルの値要求、入力規則入力を補うか、未保存の変更を取消す
独自メッセージの後に閉じないフォームの更新前処理業務ルールと入力内容を照合する
保存後も画面が残る読み込み解除時のUnloadCancel=Trueになる条件を確認する
独自ボタンだけ無反応クリック時イベント、コードの状態別ボタンを選択していないか、実行条件を確認
別フォームが閉じるDoCmd.Closeの引数対象フォーム名を明示する

UnloadイベントにはCancel引数があり、閉じる処理を取り消せます。一方、Closeイベントでは同じ方法で取消しできません。既存コードを調べるときは、単にイベント名へ「閉じる」が含まれるかだけでなく、読み込み解除時の処理も確認します。参考5

保存せず戻る機能は別に設計する

保存しないで画面を離れる機能が必要なら、未保存の変更を取消す操作と、閉じる操作を分けて考えます。通常の連結フォームではMe.Undoで現在の未保存レコードの変更を取り消せますが、すでにレコード移動などで保存した変更は戻せません。

「取消し」と書かれたボタンで、どこまで戻るのかを明確にしてください。特に明細を先に保存する画面では、親フォームだけをUndoしてもすべての明細が元に戻るわけではありません。保存済みの業務データを戻す処理は、取消伝票や履歴管理として別に設計します。

Accessの閉じられない原因の確認順を説明する図

Runtime配布と利用者向けの終了導線

Runtimeを使う利用者には、設計画面やナビゲーションウィンドウを前提としない終了導線が必要です。メニューに戻る操作、フォームだけを閉じる操作、Access全体を終了する操作を、ボタンの文言で区別すると誤操作を減らせます。

例えば「閉じる」だけでは、顧客画面を閉じるのか業務ソフト全体を終了するのか分かりません。「顧客画面を閉じる」「メニューへ戻る」のように対象を明示し、アプリ全体の終了はメニュー画面にまとめると、作業途中の画面を誤って終える事態を避けやすくなります。

ACCDEで配布しているフォームの設計を直すときは、開発原本のACCDBで変更してから配布版を作り直します。利用者ごとのコピーや旧版が残っていると、同じ操作でも結果が異なります。問い合わせ時にはファイル名だけでなく版番号も確認してください。

Accessのフォームを閉じる操作とAccess終了の違いを説明する図

変更後のテストとまとめ

修正の完了は「×が見える」だけで判断しません。正常な保存、未入力時のエラー、操作の中止、再表示の四つを確認し、データと画面の両方が想定どおりになったことを確かめます。

試す操作確認する結果
顧客名などを正しく入力して閉じる保存後にフォームが閉じ、再表示すると同じ値がある
必須項目を空欄にして閉じる理由が表示され、意図せず入力が消えない
確認ダイアログで中止する画面が残り、入力を続けられる
メニューや別フォームを同時に開く対象のフォームだけが閉じる
利用者の環境で起動する表示設定とボタンの動作が開発時と合う

閉じるボタンの問題は、タブ表示、フォーム枠、ボタンの有効化、終了時の処理の順で整理できます。設定を一度に変えず、再現条件を残しながら一つずつ確認しましょう。独自ボタンでは、保存できたことを確認してから閉じる設計が基本です。

Accessの変更後に試す四つの操作を説明する図

よくある質問

タブ形式でドキュメントタブを隠していると、フォームの設定だけでは×は戻りません。まず[現在のデータベース]のタブ表示を確認し、変更後にデータベースを開き直してください。独立したウィンドウなら、フォーム全体のコントロールボックスと境界線スタイルも調べます。入力欄や詳細セクションのプロパティを見ていないかも確認しましょう。元の値を控え、一項目ずつ変更すると原因を切り分けられます。

同じではありません。灰色の×は、閉じるボタンが表示されているものの無効になっている状態です。フォームの[閉じるボタン]を確認してください。一方、×そのものがない場合は、コントロールボックスやタブの非表示など別の設定が関係します。業務画面で意図して無効化している場合は、独自の終了ボタンに入力チェックが含まれていることもあります。理由を確認せず設定だけを戻すと、その操作ルールを変えてしまいます。

Ctrl+F4は、Access内で現在アクティブなオブジェクトを閉じるために使う操作です。Alt+F4は、フォーカスのあるウィンドウやアプリの終了として働き、表示方式によって対象の捉え方が変わります。フォームだけを閉じたい利用者には、Ctrl+F4または対象を明示したボタンを案内する方が混乱しにくくなります。いずれも保存エラーや終了時の確認を省略する手段ではないため、入力途中の動作は実際の画面で確認してください。

いいえ。DoCmd.CloseのSave引数は、フォームなどのオブジェクトの変更を保存するかを指定するもので、入力したレコードを破棄する指定ではありません。通常の連結フォームでは、レコード移動や終了の過程でデータ保存が行われます。未保存の編集を取り消したい場合は、確認後にUndoを行うなど、取消し処理を別に設計します。すでに保存したレコードや別のサブフォームまでまとめて戻せるわけではないため、取消しの対象を明示してください。

コントロールウィザードや埋め込みマクロを使えば作成できます。デザインビューでボタンを配置し、フォームを閉じる動作を選ぶのが基本です。ただし、作っただけで入力データの保護まで確認できたことにはなりません。必須項目が未入力の場合、保存に失敗した場合、利用者が中止した場合を試してください。複数フォームを連携して登録する画面や、独自の確認を挟む画面では、マクロのエラー処理やVBAによる制御も検討します。

ACCDEではフォームの設計変更が制限されるため、ボタンの追加やイベントの修正は開発原本のACCDBで行い、配布版を作り直すのが基本です。Runtimeも開発用の設計操作を前提とする環境ではありません。利用者側で直そうとする前に、原本、開発担当者、現在の配布版を確認してください。修正後はRuntimeの利用条件でも入力・保存・終了を試し、古い配布ファイルが残って利用者ごとに動作が分かれないよう更新を管理します。

必須未入力などで保存できない状態のまま独自の終了処理を実行している可能性があります。DoCmd.Closeだけを実行する場合、条件によってはレコードの変更が中止されることがあるため、先に保存を要求し、失敗したら閉じない処理にします。また、入力欄が非連結で保存処理を持たない場合も、画面を閉じると値は残りません。フォームと各入力欄の保存先、更新前イベント、エラーメッセージを確認し、再表示して保存結果を確かめてください。

関連記事

Accessフォームの作成方法と用途に合う画面の選び方

Accessのデータ入力用フォームの作成方法と保存の基本

Accessのタブオーダーでカーソル移動順を設定する方法

Accessの教科書でフォームの終了処理を相談する

ここまでの手順を試しても解決しない場合や、既存業務への影響を判断しにくい場合は、対象画面・現在の設定・再現手順を整理してご相談ください。Accessの教科書のお問い合わせ窓口から、状況に合う対応方法を相談できます。


参考情報

参考1 Microsoft フォームの閉じるボタン
https://learn.microsoft.com/en-us/office/vba/api/access.form.closebutton

参考2 Microsoft コントロールボックス
https://learn.microsoft.com/en-us/office/vba/api/access.form.controlbox

参考3 Microsoft タブの表示と非表示
https://support.microsoft.com/en-us/access/show-or-hide-object-tabs

参考4 Microsoft DoCmd.Close
https://learn.microsoft.com/en-us/office/vba/api/access.docmd.close

参考5 Microsoft Unloadイベント
https://learn.microsoft.com/en-us/office/vba/api/access.form.unload

TOP