- ベストアンサー
Access modalフォームからdialogフォームの呼出しについて
お世話になります。 AccessのVBAはどの分類が適切なのかが分からないのでこちらに投稿させていただきます。 modalフォームAから戻り値を返すdialogフォームB(カレンダーコントロールから日付を取得)を呼出したいのですが、フォームBからフォームAに戻ってきたときにAccess自体が固まってしまします。(フォームAがアクティブになりません。) VB6では同様な仕組みで問題なく動作しているのですが、解決策はありますでしょうか? また、modalプロパティ指定時になにか他のプロパティも設定する必要がありますでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Acc2000で フォームAの開くときのイベントで me.modal = true を指定し フォームBを開く際に DoCmd.openform "フォームB",,,,,acDialog フォームBを閉じるときに DoCmd.close としてやってみたら普通に動きましたけれど、 何か違うことをしておられるのでしょうか?
その他の回答 (1)
何かのバグかも知れません。 ともかく、全てのコードを示しておきます。 ************** カレンダーを開く ************** Private Sub コマンドカレンダー_Click() On Error Resume Next Me.Modal = True DoCmd.OpenForm "カレンダー", , , , , acDialog, "日報,日付" End Sub ************** カレンダーフォーム ************** ・テキストボックス[日付]を配置。 Option Compare Database Option Explicit Private Sub Calendar0_Click() Me.日付 = Me.Calendar0.Value End Sub Private Sub Form_Close() Forms(CutStr(Me.OpenArgs, ",", 1)).Controls(CutStr(Me.OpenArgs, ",", 2)) = Me.日付 End Sub Private Sub Form_Load() Me.日付 = Me.Calendar0.Value End Sub ************** 共通標準ライブラリー ************** Public Function CutStr(ByVal Text As String, _ ByVal Separator As String, _ ByVal N As Integer) As String Dim strDatas() As String strDatas = Split("" & Separator & Text, Separator, , 0) CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function ※一回、全ての関連するプロシージャを消して書き直して見て下さい。
補足
全ての画面で行ないたいので、Formオブジェクトをクラスモジュールで受取り、その中でModal設定しております。 ご指摘の通り、個々のフォームにて設定してできました。 VB6だと上記方法で設定可能なのですが、AccessはNGなのでしょうか?