• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:access 直前まで開いていたフォームを閉じる。)

Accessのフォームで複数枚のフォームを開いた状態から新しいフォームを開くと直前まで開いていたフォームが自動的に閉じられない方法はあるか

このQ&Aのポイント
  • Access(2002-2007)のフォームで複数枚のフォームを開いた状態から新しいフォームを開くと、直前まで開いていたフォームが自動的に閉じられない方法はありますか?フォームは「履歴」「新規」「検索」と3つのフォームで構成されており、各フォームには他のフォームに移動するためのコマンドボタンがついています。しかし、現在の仕様では、新しいフォームを開くと直前まで開いていたフォームが閉じられず、画面上には2枚のフォームが重なって表示されてしまいます。
  • 複数枚のフォームがあるAccess(2002-2007)のフォームで、新しいフォームを開くと直前まで開いていたフォームが自動的に閉じられる方法はありますか?現在の仕様では、新しいフォームを開くと、直前まで開いていたフォームが閉じられず、画面上には複数のフォームが重なって表示されてしまいます。この問題を解決する方法を教えてください。
  • Access(2002-2007)のフォームで複数枚のフォームを開いた状態から新しいフォームを開くと、直前まで開いていたフォームが自動的に閉じられない問題について教えてください。現在の仕様では、新しいフォームを開くと直前まで開いていたフォームが閉じられず、画面上には2枚のフォームが同時に表示される状態になっています。この問題を解決する方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

「常に1つのフォームだけが開いた状態」にしたいということでよろしければ、 以下のようなマクロを作成し、3つのフォームの『開くとき』イベントで 実行させれば、おおむねOKです。 ※「おおむね」の理由については後述。 <アクション>  閉じる <引数>  オブジェクトの種類: フォーム  オブジェクト名: =Screen.ActiveForm.Name  ※先頭に「=」が必須となるのでご注意下さい。   (なお、入力後は自動的に角括弧で括られます) 「Screen.ActiveForm.Name」は、現在アクティブになっているフォームを 確認できるので重宝します。 但し、最初にフォームを開くときはアクティブなフォームがないために、 エラーになってしまうという問題があります(→上で「おおむね」とした理由)。 これを回避するために、新たにダミーのフォームを作成して、Autoexec マクロか『起動時の設定』で開くフォームにはこれを指定した上で、 そのフォームをアクティブにしてから、ユーザーが最初に触るフォームを 開くようにしてください。 【ダミーフォームの『開くとき』イベントに組み込むマクロ】 全部で2つのアクションになります。 <アクション>  値の代入 <引数>  アイテム: Forms!ダミーフォーム.Visible  式: True  ※ダミーフォームを強制的にアクティブ化 <アクション>  フォームを開く <引数>  フォーム名: (「履歴」「新規」「検索」のどれか) ※最初に開くフォームをAutoexecマクロで開いている場合は、『開くとき』  イベントに組み込む代わりに、同マクロに直接、    『フォームを開く』(ダミーフォーム)    『値の代入』(Forms!ダミーフォーム.Visibleへの代入)    『フォームを開く』(「履歴」「新規」「検索」のどれか)  を組み込む形でも可です。

23tomo-u
質問者

お礼

回答ありがとうございます。 できました! なんか格好良くなりました、思った通りになりました。 ただ「検索」する時、パラメータクエリで検索しているので、 一時的に画面が全て消え、パラメータの画面だけ (「顧客名を入力してください」みたいな)出るので違和感があるというか、 なにか淋しい感じがしますが、これは工夫でカバーしようと思います。 実は「メニュー画面(フォーム)」も作っており、 起動時の設定に組み込んであるので、 ダミーフォームを作るまでは至らなかったです。 むしろメニュー画面(フォーム)を残しつつ、「=Screen.ActiveForm.Name」も 使うという方向で考え、それも出来ました(笑)。 丁寧な回答ありがとうございました!

すると、全ての回答が全文表示されます。

関連するQ&A