1

Access 2010を使用していて、VBAコードを開始する「名前を付けて保存」というForm1のボタンをクリックしてもらいたいのですが、コードの実行が完了する前に、一時停止してForm2を開きます(ユーザーが「 [名前を付けて保存]タイトルをクリックし、[保存]をクリックします。次に、Form2に入力した文字列を変数として使用して、Form1でコードを実行し続けます。

ユーザーが入力を行うのを待つため、Form1のコードを「一時停止」する方法がわかりません。これにアプローチする方法について何かアイデアはありますか?

4

2 に答える 2

2

から、ダイアログ モード Form1で開きます。コードは待機します。 Form2Form1Form2

「完了」ボタンをに追加し、プロパティを Falseに設定して非表示のフォームを再度開くForm2クリック イベントにプロシージャを追加します。非表示にすると、ダイアログ モードが解除されます。したがって、ユーザーが値を入力した後、「完了」をクリックすると、フロー制御が再開され、現在非表示のコントロールから入力値を読み取ることができます。Form2.VisibleForm1Form2

このアプローチでは、Form2について何も知る必要はありませんForm1。そのForm2ため、任意のフォームやその他のコードの入力を収集するために使用できます。

したがって、Form1という名前のコマンド ボタンがあると仮定cmdSaveAsすると、クリック イベント プロシージャとして次のようなものを使用します。

Private Sub cmdSaveAs_Click()
    DoCmd.OpenForm "Form2", acNormal, WindowMode:=acDialog
    ' the next line is not executed while Form2 is modal (open in dialog mode);
    ' but after Form2 is hidden, we can read the value of the text
    ' box named txtInput
    MsgBox "User input was: " & Forms!Form2!txtInput
End Sub
于 2012-11-16T18:12:59.120 に答える
1

WindowMode パラメータを acDialog に設定して Docmd.OpenForm を使用して Form2 を開きます。これにより、呼び出し元のフォーム (Form1) のコードが停止し、呼び出されたフォーム (Form2) が閉じるのを待ちます。Form2 で [保存] ボタンをクリックすると、名前を付けて保存のタイトルを Form1 の非表示のテキスト ボックス コントロールに書き込むか、Form1 のプロパティを必要な値に設定できます。Form1 に戻ったときに、ユーザーが [名前を付けて保存] タイトルの値を入力しなかった場合にどうするかを計画してください。

于 2012-11-16T18:08:59.113 に答える