• ベストアンサー

AccessVBAでループ使用時にフォームの数値項目名を増減させたい

こんにちわ 私の環境はOS:Xp      ACCESS2000です。 タイトルに書きました通り 「AccessVBAでループ使用時にフォームの数値項目名を増減させたい」のです。 例えば、 Do Until ~ Loop の中で、 顧客名1という項目名があったとします。 その「1」の部分をループが回るごとに1づつ増やし、 顧客名1、顧客名2、顧客名3・・・ としていきたいのです。 知っておられる方がおられましたら、どうか宜しくお願いします。

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

  • ベストアンサー
  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.1

> 顧客名1という項目名があったとします。 コントロール名ということですよね? Dim lngIdx As Long For lngIdx = 1 To 3   Debug.Print Me.Controls("顧客名" & lngIdx) Next lngIdx のようにすれば大丈夫だと思います。

yu--ko
質問者

お礼

>Debug.Print Me.Controls("顧客名" & lngIdx) >の時はうまくいけたんですけど、 >Debug.Print Me.Controls(Me.顧客管理サブフォーム.Form("顧客名" & lngIdx)) >にすると「型が一致しません」とエラーがでました。 上記の問題ですが、おかげさまで解決いたしました。 Debug.Print Me.Controls(Me.顧客管理サブフォーム.Form("顧客名" & lngIdx)) を Me.顧客管理サブフォーム.Form("顧客名" & lngIdx) こうする事で解決いたしました。なぜだかは解らないのですが・・・ 色々とありがとうございました。

yu--ko
質問者

補足

ありがとうございます! 大変参考になりました。 あつかましいのですが、追加で初歩な質問をさせていただきます。 Dim lngIdx As Long For lngIdx = 1 To 3   Debug.Print Me.Controls("顧客名" & lngIdx) Next lngIdx 上記の「"顧客名"」というコントロール名なのですが、サブフォームに作成しているので 今までは、 「Me.顧客管理サブフォーム!顧客名1」 という記述をしておりました。 上記の場合、どこにセミコロン等を使えばよいのでしょうか? 追加質問で失礼かとは思いますが、宜しくお願いします。

その他の回答 (2)

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.3

> Me.顧客管理サブフォーム!顧客名1 Me.顧客管理サブフォーム.Form.Controls("顧客名" & lngIdx) とか、 Me.顧客管理サブフォーム.Form("顧客名" & lngIdx) とかのようにすれば大丈夫だとは思います。

yu--ko
質問者

お礼

ちなみに Debug.Print Me.Controls("顧客名" & lngIdx) の時はうまくいけたんですけど、 Debug.Print Me.Controls(Me.顧客管理サブフォーム.Form("顧客名" & lngIdx)) にすると「型が一致しません」とエラーがでました。 どのようにしたら解決できるのでしょうか? 宜しくお願いします。

yu--ko
質問者

補足

ありがとうございます。 しかしなぜか「型が一致しません」というエラーがでます。 lngIdx の型宣言がおかしいのかと、long,integer,stringなどを試したのですが、同じエラーが表示されてしまいます。 どの箇所が問題の可能性があるのでしょうか? 宜しくお願いします

  • laputart
  • ベストアンサー率34% (288/843)
回答No.2

ご説明だけでは判断できない部分がありますが こんな感じでしょう。 ※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

関連するQ&A