2017-04-25 2 views
0

***** EDITEDOpenArgsを使用したフォーム間で値を渡す

「NewInvoice」というフォームがあります。このフォームは、以下を含むテーブル "請求書"を編集します。請求書番号、顧客、注文日。このフォームには、 "InvoiceItem"というサブフォームを開くボタンがあります。これにより、請求書番号、商品コード、寸法などを含む同じ名前の表が編集されます。

現在、マイボタンには次のようなイベントプロシージャがあります。


ます。Private Sub CreateInvoiceItem_Click()

DoCmd.OpenForm "InvoiceItem"、OpenArgs:= "InvoiceNumber"

End Subの


(私はボタンを使用していた理由別のウィンドウでフォームを開くのは、サブフォームを親フォームに挿入するときに、サブフォームにコンボボックスがカスケードするために壊れてしまうためです)

ここで、フォームロードコマンドを設定する際に問題が発生しています。私が発生したいのは、ボタンがクリックされたときに親フォームに記入されたInvoiceNumberがサブフォームに自動的に埋められるということです。


プライベートサブのForm_Load()

****必要なコード****

End Subの

+1

これを達成するにはいくつかの方法があります。最も簡単なアプローチは、フォーム/サブフォームの配置を構築することです。コードは必要ありません。他の方法については、どのような研究をしましたか?特定の問題を持つコードを開発する場合は、質問を投稿してください。 – June7

+0

まあ、私はかなり理解していない解決策を見つけたいくつかの場所でウェブの周りを見てきました。私にとって大きなことは、単に他の人のコードをコピーして動作させたいだけでなく、どのツールを使用するのか、どのコードが実際に行っているのか知りたいので、他の状況にも適用できるということです。 はい、私は直接接続するサブフォームを使用することができましたが、このソリューションは、私がコード化したコンボボックスをカスケード接続しているサブフォームのように私にとってはうまくいきませんでした。これらは、メインフォームのサブフォームとして使用しようとすると、順番に機能しません。 – jBry562

+1

RowSourceが適切に構造化されたSQL文である場合、コンボボックスが機能します。 2番目の(依存する)コンボボックスのSQL文でフォーム名を使用しないでください。最初の(1次)コンボボックスの名前を参照するだけです: 'SELECT fieldname FROM tablename WHERE ID = [combobox name];'これは、両方のコンボボックスがサブフォームにあると仮定します。 'cbxID'のように、バインドされているフィールドとは異なるデータコントロールに名前を付けるのがベストです。 – June7

答えて

0

質問の下のコメントで述べたように、コンボボックスを固定してみてください。また、GotFocusイベントに依存するコンボボックスを再クエリーするコードを推奨します。ルックアップエイリアスを使用したカスケードコンボボックスは、連続またはデータシート形式でうまく動作しません。

あなたが本当に独立したフォームに価値を渡したいのであれば、OpenArgsは良いアプローチです。

おそらく、新しいレコード行にフォームを開く必要があります。

DoCmd.OpenForm "InvoiceItem", , , , acFormAdd, acDialog, Me!InvoiceNumber

フォームが新しいレコードであることを確認するコードが必要です。

Private Sub Form_Load() 
If Me.NewRecord Then Me!InvoiceNumber = Me.OpenArgs 
End Sub 
+0

私はずっと黙っていることをお詫びします。現在、私の最後の学期が終わり、仕事中に多くのことが起こっています。私はこのプロジェクトに戻ったときにこれを調べることを約束します!あなたのご意見をありがとうございました! – jBry562

0

私はこれを行うための最善の方法は、あなたが開いた後、フォームを開いたときに、この機能には何が必要なパラメータ渡しているフォームに公開サブを追加することであることがわかります。あなたが探していることを行うには、開いているフォームにこのような関数を追加します。

Public Sub SetUpForm(InvoiceNumber as Long) 

    txtInvoiceNumber.Value = InvoiceNumber 

End Sub 

ここで、txtInvoiceNumberは、値を入力するフォーム上のコントロールです。

あなたのボタンから。

DoCmd.OpenForm "InvoiceItem" 
Forms!InvoiceItem.SetUpForm InvoiceNumber 

これは、請求書番号の値を、開いているフォームのコントロールに渡します。これにより、複数のパラメータをサブに渡すことができるため、プロセスを柔軟に制御できます。また、サブには任意の数のタスクを実行できます。

+0

私はとても長い間黙っていることをお詫びします。現在、私の最後の学期が終わり、仕事中に多くのことが起こっています。私はこのプロジェクトに戻ったときにこれを調べることを約束します!あなたのご意見をありがとうございました! – jBry562

関連する問題