ここでの問題はポップアップであり、モーダルフォームは呼び出しコードを停止しません。
しかし、コードを停止する必要があります。それにはダイアログフォームが必要です。
さらに悪いことに、ダイアログ・フォームはリサイズを許可していません。
ここでは3種類のフォームを混同したくありません。
モーダルフォーム - ポップアップフォームとは異なり、ダイアログフォームとは非常に異なります。
ポップアップフォームでも同様です。ダイアログフォームではなく、実際にはモデルでもありません。
アクセスアプリケーションがタブ付きドキュメントを使用するように設定されている場合や、ウィンドウが重なっている場合も考慮する必要があります。 (これにより、あなたの選択肢が再び制限されます)。
タブ付きインターフェイスを使用している場合は、サイズ変更可能な機能が必要な場合はポップアップフォームを使用する必要がありますが、このタイプのフォームは呼び出しコードを停止しません。
ウィンドウが重なっている場合は、モーダルフォームをお勧めします。 (しかし、やはり呼び出しコードは停止しませんが、サイズ変更は可能です)。
2番目のフォームが却下されるのを待っている呼び出しフォームにループコードを採用することができましたが、そのようなループはプロセッサーの塊であり、マウスと入力の点で「不良」な応答を引き起こすことがよくあります。
だから私はあなたのコードのアプローチを変更することをお勧めします。呼び出しフォームがポップアップ(またはタブ付きインターフェースを使用しない場合はモーダル)としてフォームを起動するようにします。
フォームを閉じると、呼び出し元のフォームで実行したいコードがいくつか呼び出されます。つまり、2番目のフォームを閉じた後に実行したいコードを分割し、そのコードを終了フォームのcall +で実行する必要があります。
"一般的な"アプローチでは、フォーム名をハードコーディングしないようにする必要があります。 "多くの"ルーチンとフォームは、2番目のフォームを呼び出すことができ、そのようなフォームを再利用します。
だから、このてみてください:呼び出しの形式は次のようにrefeanceつかむ、上開き、このフォームのイベントをフォームに
Option Compare Database
Option Explicit
Dim frmPrevious As Form
:このようなモジュールレベルのフォーム変数を作成し、2番目の形式で を
Set frmPrevious = screen.ActiveForm
今の形に近いイベントは、次の操作を行います。
が
をfrmPrevious.AfterClose
そして、呼び出し元の形で、だから、最初の形式でパブリック関数では、あなたは、あなたが2番目のフォームを閉じるときに実行したいコードを配置
AfterClose
と呼ばれるパブリック関数を作成します。これは第2のフォームを呼び出し、待っている、そして続行する、「より少なく」理想的な手続き型コードです - しかし、私はまだ最良の選択について考えています。
そして、あなたが閉じる前に、あなたが渡すことができますなどの呼び出しフォームに戻り値を「設定」:あなたがしたい場合は、最初の行の上(呼び出し元の形式でパブリック変数を設定して
frmPreviuos.SomePubicVar = me!LastNameSelected
frmPrevious!Company = me!CompanySelected
frmPrevious.AfterClose
これを行い、最初の形式でモジュールレベルの変数に値を戻します)。そして、次の行は、呼び出し元フォームのコントロールの値を設定します(呼び出し元フォームのいくつかのコントロールに値を戻したい場合)。
3行目は、呼び出し元のフォームでMyCloseコードを実行します。フォームにキャンセルボタンがある場合は、そのようなコードを実行したくないかもしれないので、上記のコードをそのボタンの後ろに移動してください(キャンセルボタンは単純にフォームを閉じます - しかし、最初のフォームで上記のコードを呼び出し+実行しないでください)。また、Xを打つと、キャンセルまたは終了と見なされます。つまり、あなたの「保存」ボタン、「OK」ボタン、または「選択」ボタンには上記のコードがあります。
しかし、これはフォーム以外のサイズを変更できるようになります。 – Andre