- ベストアンサー
ACCESS フォームに入力した文字列と同じコントロール名の値を得たい
いつもお世話になっております。 どなたか、教えてください。 Aフォーム(単票)の当年月フィールド(非連結)に「200709」と入力 その後、Bフォームを開くと、 当年月数値フィールド(非連結)に”200709”と名前が付いているコントロール名の値をセットしたいと思っています。 Bフォームを開きながらAフォームの値を変えることはありません。 Bフォームを開く際の処理でも、当年月数値フィールドのコントロールソースの指定でも構いません。 よろしくお願いいたします。 (わかりづらい文章で申し訳ありません。)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
200709というコントロールがどちらのフォームにあるのかがわかりませんが、 Forms!Bフォーム.Controls("200709") は Bフォーム.200709 と同じ意味です。 よって、 me.当年月数値フィールド=forms!Bフォーム名.Controls(me.当年月フィールド) とすることで目的は達せられると思います。 (エラー処理等一切していません。) しかしフォームからデータを拾うというのはシステムの構造上あまり良くないような気がします。 まあmdbとはいえ、せっかくデータベースを使っているので、テーブルから探してきましょう。 また、入力を行ったものから選択肢を選ぶというのも運用上良くないことが起こる可能性があります。(検索はかまいませんが) これもテーブルのデータをリストボックスなどに格納しその中から選ぶことによって間違いが少なくなります。
その他の回答 (2)
- TYmamy
- ベストアンサー率50% (1/2)
Bフォームのテキストボックスのデータのコントロールソースに =Forms!Aフォーム!当年月フィールド とすればいいと思います。 ただし、この時Aフォームが閉じていると、エラーになります。 そういう時は、モジュールで変数を宣言して、 そこに値を入れておくことになります。
お礼
ありがとうございます。 しかし、表示したいものは当年月フィールドと同じコントロールの値です。 当年月に「200709」と入力したら、200709という名前のコントロールの 50,000(←例)を表示したいのです。
Const 当年月フィールドインデックス = 0 Private Sub コマンド0_Click() On Error Resume Next If Len(Me.当年月フィールド & "") > 0 Then DoCmd.OpenForm "frmB", acDesign, , , , acHidden Forms("frmB").Controls(当年月フィールドインデックス).Name = Me.当年月フィールド DoCmd.Close acForm, "frmB", acSaveYes DoCmd.OpenForm "frmB" Else MsgBox "先に[当年月フィールド]を入力して下さい。" End If End Sub Private Sub Form_Current() MsgBox Me.Controls(0).Name End Sub 確実に mdb を壊す原因となりますので、この回答は採用しないで下さい。
お礼
御回答ありがとうございます。 が、使わないほうがいいのですね。了解しました。
お礼
ありがとうございました! 無事にできました。 感謝します!!