電子書籍の厳選無料作品が豊富!

宜しくお願いします。

仕様環境 Access(2002-2007)

請求書作成フォームを作りました。
(顧客情報を入力して印刷などができるスタンダードなものです)

フォームは「履歴」「新規」「検索」と3つのフォームで構成されています。
それぞれに他のフォームに移動出来るようにコマンドボタンがついていて、
例えば、「履歴フォーム」を開いて「新規」というボタンを押すと「新規フォーム」が
開く仕様です。

ただ、この場合、履歴フォームを開いたまま、新規フォームが開く感じになるので、
実質、画面上は2枚のフォームが開いています。(重なるので1枚に見えますが・・)
更に言えば、この状態から「検索」というボタンで検索フォームを開くと
3枚のフォームが開いた状態になります。

これを、例えば履歴フォームから新規フォームを開くと
履歴フォームが閉じる仕様にしたいと思っています。
また別のフォームを開くと直前まで開いていたフォームが
閉じる仕様にしたいと思っています。

まとめると、
”新しいフォームを開くと直前まで開いていたフォームは自動的に閉じられる。”

こんな感じにしたいのですが、何か方法はありますでしょうか。
複数枚(2枚以上)のフォームがあるのが鍵だと思います。

お知恵をお貸しください、宜しくお願いします。
(当方、マクロです)

「access 直前まで開いていたフォーム」の質問画像

A 回答 (1件)

「常に1つのフォームだけが開いた状態」にしたいということでよろしければ、


以下のようなマクロを作成し、3つのフォームの『開くとき』イベントで
実行させれば、おおむねOKです。
※「おおむね」の理由については後述。

<アクション>
 閉じる
<引数>
 オブジェクトの種類: フォーム
 オブジェクト名: =Screen.ActiveForm.Name
 ※先頭に「=」が必須となるのでご注意下さい。
  (なお、入力後は自動的に角括弧で括られます)

「Screen.ActiveForm.Name」は、現在アクティブになっているフォームを
確認できるので重宝します。
但し、最初にフォームを開くときはアクティブなフォームがないために、
エラーになってしまうという問題があります(→上で「おおむね」とした理由)。

これを回避するために、新たにダミーのフォームを作成して、Autoexec
マクロか『起動時の設定』で開くフォームにはこれを指定した上で、
そのフォームをアクティブにしてから、ユーザーが最初に触るフォームを
開くようにしてください。

【ダミーフォームの『開くとき』イベントに組み込むマクロ】
全部で2つのアクションになります。

<アクション>
 値の代入
<引数>
 アイテム: Forms!ダミーフォーム.Visible
 式: True
 ※ダミーフォームを強制的にアクティブ化

<アクション>
 フォームを開く
<引数>
 フォーム名: (「履歴」「新規」「検索」のどれか)

※最初に開くフォームをAutoexecマクロで開いている場合は、『開くとき』
 イベントに組み込む代わりに、同マクロに直接、
   『フォームを開く』(ダミーフォーム)
   『値の代入』(Forms!ダミーフォーム.Visibleへの代入)
   『フォームを開く』(「履歴」「新規」「検索」のどれか)
 を組み込む形でも可です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

できました!
なんか格好良くなりました、思った通りになりました。
ただ「検索」する時、パラメータクエリで検索しているので、
一時的に画面が全て消え、パラメータの画面だけ
(「顧客名を入力してください」みたいな)出るので違和感があるというか、
なにか淋しい感じがしますが、これは工夫でカバーしようと思います。

実は「メニュー画面(フォーム)」も作っており、
起動時の設定に組み込んであるので、
ダミーフォームを作るまでは至らなかったです。
むしろメニュー画面(フォーム)を残しつつ、「=Screen.ActiveForm.Name」も
使うという方向で考え、それも出来ました(笑)。

丁寧な回答ありがとうございました!

お礼日時:2010/03/09 23:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す