プロが教えるわが家の防犯対策術!

ACCESS2003で開発しています。
ひとつのフォーム(Form1)にサブフォームを10個(SubForm01からSubForm10まで)配置しており、そのフォーム内のボタンで1つのサブフォームを切り替え表示するようにしています。
サブフォーム部分だけがページ遷移しているように見えるような感じのことしたいので、こんな面倒なことをやっています。
各サブフォームの処理は全く一緒なのですが、サブフォームが10個もある為に同じ処理をForm1に10まとまり書かないといけないので、サブフォームの名前を変数にできないかなと考えていますがやり方がわかりません。
下記ソースで色々試してみたのですが、だめでした。
具体的にはサブフォーム(SubForm01~SubForm10まで)のテキストボックス(txtBox1~txtBox30)に順に値を入れたいということです。
教えてください。
Dim strPageCnt As String 'サブフォームの番号
'(処理省略)ここでstrPageCntに01から10までのいずれかの値を放り込んでいます。
For i = 1 To rs.RecordCount 'レコードセット最大値までループ
'↓ここでサブフォーム名を変数に入れる
   strSubForm = frmLOT31010_SubForm & strPageCnt
'↓この方法もだめ
   Forms!Form1!strSubForm!txtBox(i).Value = rs("NO").Value
   '↓この方法もだめ
   Forms!Form1!SubForm("strPageCnt")!txtBox(i).Value = rs("NO").Value
'↓これもだめ
   Forms!Form1!SubForm(strPageCnt)!txtBox(i).Enable = False
   '↓これもだめ
Forms!Form1!SubForm(strPageCnt)!txtBox(i + 1).SetFocus
next

どのようにすればサブフォームの名前を変数に入れて、なおかつサブフォーム名を可変にし(ここで言うところのサブフォームの最後の数値を変えて)サブフォームが扱えるようになりますか?
教えてください。よろしくお願いいたします。

A 回答 (1件)

やりたい事が良くわかりませんが


strSubForm = frmLOT31010_SubForm & strPageCnt
のfrmLOT31010_SubFormって何?サブフォームの名前?

サブフォーム(SubForm01~SubForm10まで)と書かれていますが
名前をSubForm・・とされているなら

For Ix1 = 1 To 10
Controls("SubForm" & Format(Ix1,"00")).Form.TxtBox1.Text = "XXX"
Next

でアクセスできるのでは

また、サブフォーム内のテキストも名前を順に取っているのなら
Controls("SubForm" & Format(Ix1,"00")).Form.Controls("TxtBox" & Format(Ix2,"00")).Text
でアクセスできると思います。

文字とコントロールの文字列結合は出来ません
コントロール名とするなら.Nameと書くべきだし擬似的にコントロールを配列化したいなら名前を連番にしてControls("SubForm" & Format(Ix1,"00"))として扱う方法がベターです
    • good
    • 0
この回答へのお礼

frmLOT31010_SubFormとは実際使っているサブフォームです。
置き換えたつもりだったのですが・・・

noah7150のさんに教えていただいた方法でテキストボックスの参照についてはできました。ありがとうございました。
あともうひとつ。
サブフォーム自体を変数に入れたいのです。
やりたいことは、サブフォームをVisible = false です。
どのようにしたらよいでしょうか??

Forms("SubForm" & Format(Ix1,"00")).Visible = False

のようにしたのですがだめでした。サブフォームだから無理なのはわかっていたのですが、やり方がわかりませんでした。
よろしくお願いいたします。

お礼日時:2009/05/28 13:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A