• ベストアンサー

ACCESS フォームに入力した文字列と同じコントロール名の値を得たい

いつもお世話になっております。 どなたか、教えてください。 Aフォーム(単票)の当年月フィールド(非連結)に「200709」と入力 その後、Bフォームを開くと、 当年月数値フィールド(非連結)に”200709”と名前が付いているコントロール名の値をセットしたいと思っています。 Bフォームを開きながらAフォームの値を変えることはありません。 Bフォームを開く際の処理でも、当年月数値フィールドのコントロールソースの指定でも構いません。 よろしくお願いいたします。 (わかりづらい文章で申し訳ありません。)

質問者が選んだベストアンサー

  • ベストアンサー
noname#60992
noname#60992
回答No.3

200709というコントロールがどちらのフォームにあるのかがわかりませんが、 Forms!Bフォーム.Controls("200709") は Bフォーム.200709 と同じ意味です。 よって、 me.当年月数値フィールド=forms!Bフォーム名.Controls(me.当年月フィールド) とすることで目的は達せられると思います。 (エラー処理等一切していません。) しかしフォームからデータを拾うというのはシステムの構造上あまり良くないような気がします。  まあmdbとはいえ、せっかくデータベースを使っているので、テーブルから探してきましょう。  また、入力を行ったものから選択肢を選ぶというのも運用上良くないことが起こる可能性があります。(検索はかまいませんが) これもテーブルのデータをリストボックスなどに格納しその中から選ぶことによって間違いが少なくなります。

naopyong
質問者

お礼

ありがとうございました! 無事にできました。 感謝します!!

その他の回答 (2)

  • TYmamy
  • ベストアンサー率50% (1/2)
回答No.2

Bフォームのテキストボックスのデータのコントロールソースに =Forms!Aフォーム!当年月フィールド とすればいいと思います。 ただし、この時Aフォームが閉じていると、エラーになります。 そういう時は、モジュールで変数を宣言して、 そこに値を入れておくことになります。

naopyong
質問者

お礼

ありがとうございます。 しかし、表示したいものは当年月フィールドと同じコントロールの値です。 当年月に「200709」と入力したら、200709という名前のコントロールの 50,000(←例)を表示したいのです。

noname#140971
noname#140971
回答No.1

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 を壊す原因となりますので、この回答は採用しないで下さい。

naopyong
質問者

お礼

御回答ありがとうございます。 が、使わないほうがいいのですね。了解しました。

関連するQ&A