- ベストアンサー
AccessVBAでループ使用時にフォームの数値項目名を増減させたい
こんにちわ 私の環境はOS:Xp ACCESS2000です。 タイトルに書きました通り 「AccessVBAでループ使用時にフォームの数値項目名を増減させたい」のです。 例えば、 Do Until ~ Loop の中で、 顧客名1という項目名があったとします。 その「1」の部分をループが回るごとに1づつ増やし、 顧客名1、顧客名2、顧客名3・・・ としていきたいのです。 知っておられる方がおられましたら、どうか宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 顧客名1という項目名があったとします。 コントロール名ということですよね? Dim lngIdx As Long For lngIdx = 1 To 3 Debug.Print Me.Controls("顧客名" & lngIdx) Next lngIdx のようにすれば大丈夫だと思います。
その他の回答 (2)
- Gin_F
- ベストアンサー率63% (286/453)
> Me.顧客管理サブフォーム!顧客名1 Me.顧客管理サブフォーム.Form.Controls("顧客名" & lngIdx) とか、 Me.顧客管理サブフォーム.Form("顧客名" & lngIdx) とかのようにすれば大丈夫だとは思います。
お礼
ちなみに Debug.Print Me.Controls("顧客名" & lngIdx) の時はうまくいけたんですけど、 Debug.Print Me.Controls(Me.顧客管理サブフォーム.Form("顧客名" & lngIdx)) にすると「型が一致しません」とエラーがでました。 どのようにしたら解決できるのでしょうか? 宜しくお願いします。
補足
ありがとうございます。 しかしなぜか「型が一致しません」というエラーがでます。 lngIdx の型宣言がおかしいのかと、long,integer,stringなどを試したのですが、同じエラーが表示されてしまいます。 どの箇所が問題の可能性があるのでしょうか? 宜しくお願いします
- laputart
- ベストアンサー率34% (288/843)
ご説明だけでは判断できない部分がありますが こんな感じでしょう。 ※rsの宣言などについては省略します。 ※通常レコードセットを最初から最後までチェックする ループと考えています。 その中でIf条件に合致した場合新たにループが発生 する場合は以下の通りです。 ●条件というのは「顧客名」というフィールドに具体的な 顧客名 例ABC株式会社 を発見した時という事でしょうか。その場合 顧客名1,顧客名2...と 変数にするのでしょうか。その当りがよくわかりません。 ●無限ループに注意してください。 ------プロシジャ例------------------------------- ※ rsを前もってレコードセットとして定義 レコードセットをOpenしておく rs.movefirst Do until rs.eof If rs!フィールド1=Kokyakumei then Do until 条件 ここにループを作る Loop End If rs.movenext Loop
お礼
>Debug.Print Me.Controls("顧客名" & lngIdx) >の時はうまくいけたんですけど、 >Debug.Print Me.Controls(Me.顧客管理サブフォーム.Form("顧客名" & lngIdx)) >にすると「型が一致しません」とエラーがでました。 上記の問題ですが、おかげさまで解決いたしました。 Debug.Print Me.Controls(Me.顧客管理サブフォーム.Form("顧客名" & lngIdx)) を Me.顧客管理サブフォーム.Form("顧客名" & lngIdx) こうする事で解決いたしました。なぜだかは解らないのですが・・・ 色々とありがとうございました。
補足
ありがとうございます! 大変参考になりました。 あつかましいのですが、追加で初歩な質問をさせていただきます。 Dim lngIdx As Long For lngIdx = 1 To 3 Debug.Print Me.Controls("顧客名" & lngIdx) Next lngIdx 上記の「"顧客名"」というコントロール名なのですが、サブフォームに作成しているので 今までは、 「Me.顧客管理サブフォーム!顧客名1」 という記述をしておりました。 上記の場合、どこにセミコロン等を使えばよいのでしょうか? 追加質問で失礼かとは思いますが、宜しくお願いします。