こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access2013 VBA 複数の画面の遷移

複数の画面のメニューの遷移をスル場合、みなさんは、フォーム名をベタ書きで書いてらっしゃるのでしょうか。それとも、遷移元のフォームの名前を取得して戻るボタンをおした時に、そのフォームをVisible = trueにしたりしているのでしょうか。

私の場合には、ModuleにPublicで宣言した各フォームの階層事の変数に遷移元の名称の場合にだけ、そのフォームの名前を変数に保存して、戻るボタンでそのフォームを表示する処理をしています。
Private Sub Form_Load
module.Public変数 = module.Public遷移元の画面名

End Sub

Private Sub Cmd戻るボタン
Forms(module.Public遷移元の画面名).visible = true
DoCmd.Close acForm, Me.Name

End Sub

しかし、この画面の階層毎に変数をつくり、それに遷移元の画面名をセットするのも面倒くさいやり方で、これよりも何か楽な汎用性のあるやり方はありますでしょうか?

よろしくお願いします。

投稿日時 - 2014-12-11 10:51:19

QNo.8854474

すぐに回答ほしいです

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

補足の意味を読み取れていないような気がしますのでご参考まで。
「履歴としての戻る」と
「メニュー階層の上に戻る」をごっちゃに考えているような?

別解になってしまいますが、
Access2010から利用できるナビゲーションフォームも検討されては?
http://msdn.microsoft.com/ja-jp/library/office/ff851947%28v=office.14%29.aspx

投稿日時 - 2014-12-14 11:37:55

お礼

ありがとうございます。

上に戻る場合は、戻る上の画面の名前をそのままベタ書きでもいいのでしょうか。

履歴としての戻るの場合には、その前の画面の名前を取得するので、Form.OpenArgsとか、Screen.ActiveFormなんかで取得ができると思いますが。

このナビゲーションフォームは、全てのフォームが完成してから作成するような感じでしょうか?

投稿日時 - 2014-12-14 14:34:35

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

たとえば呼び出し元で
DoCmd.OpenForm "フォーム名", OpenArgs:=Me.Name
と自身の名前をOpenArgsに渡します。

呼び出された側では
If Me.OpenArgs <> "" Then
If CurrentProject.AllForms(Me.OpenArgs).IsLoaded Then
Forms(Me.OpenArgs).SetFocus
Else

End If
End If
みたいなこととか・・・。
勘違い回答かも。ご参考まで。

投稿日時 - 2014-12-11 13:47:13

補足

ご回答ありがとうございます。
そうするとですね、以下のような画面の遷移があるとするとおかしくなる場合があるんです。
Aメニュー→Bメニュー→Cメニュー→フォーム1
Aメニュー→Bメニュー→Cメニュー→フォーム2
Aメニュー→Bメニュー→Cメニュー→フォーム3

・Cから、フォーム1に行き、Cに戻り、フォーム2に行き、Cに戻る。
すると、CからBに戻れない。戻るボタンを押すと、フォーム2に行ってしまう。
こういうバグを治したロジックってどうすればいいのかな・・・と思ったのです。

投稿日時 - 2014-12-14 09:07:29

ANo.1

必ず元フォームに戻るなら、モーダルで開くとか。
WindowModeがacDialogだったかな?

投稿日時 - 2014-12-11 11:41:45

あなたにオススメの質問