• ベストアンサー

VBでこんなことできますか??

例えば、テキストボックスが縦に100個並んでいるとします。あるボタンを押すと、textbox1~textbox100までの値(.text)を、順番にmsgboxで出していくとしたら・・・。 Sub bottun1_click msgbox textbox1.text msgbox textbox2.text msgbox textbox3.text ・ ・ msgbox textbox100.text End Sub じゃ無いと無理でしょうか? 何とかループ文でできないでしょうか? 知りたいことは、 オブジェクト名「textbox1」を何とか"textbox" & "1" のように表現できないものでしょうか?? これが表現できれば、変数の値を1~100回ループすれば たったの1文でできるような気がします。 どなたかご教授下さい。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

試してませんがこんな感じかな? textboxがワークシート上にあるとして Sub test() For i = 1 To 100 MsgBox ActiveSheet.TextBox & i.Text Next End Sub

kyo----
質問者

お礼

そうっ!!そうです!! 自分がやりたいのはまさにこれなんですよ!! Textbox1.text ↑これを dim a as string a = "1" Textbox & a.text ↑これで表現する!! しかーし、これでやるとオブジェクトが認識されずに エラーがでてしまうのです(:;)・・。 やっぱ無理なのでしょうか・・?

その他の回答 (5)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

No3です。 「コントロール」じゃなくてフォームのテキストボックス(ワークシート上に配置)ならこれでできました。 Sub test() For i = 1 To 5 MsgBox ActiveSheet.TextBoxes("Text Box " & i).Text Next End Sub コントロールのTextboxは使ったことが無いのでわかりません。

kyo----
質問者

お礼

お返事ありがとう御座いました! VBAにはコントロール配列がないようですので、 Me.Controls("Text" & "1").text ↑これでなんとかループでまわせました。 ありがとうございました!

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.5

VBAですか。 オブジェクトを認識するのに、文字列結合しても無理ですよ。 最悪、貼り付けたオブジェクト自体を変数配列(当然コントロールオブジェクト) に登録していくってのもありそうですが・・・ ↓ http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html
kyo----
質問者

お礼

お返事ありがとう御座いました! VBAにはコントロール配列がないようですので、 Me.Controls("Text" & "1").text ↑これでなんとかループでまわせました。 ありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

VBAにはないが、VBには「コントロール配列」という使い方ができます。 コントロール名のあとに、(要素数)をつけて使えます。 ただオブジェクトをクリエイトするとき、コピーを普通使いますが。使わないで、コントロール配列化するのはIndexプロパテイの設定でできそう。参考 http://www005.upp.so-net.ne.jp/h-masuda/vb6/vb6first/mogura0101.html  VB.NETでは、参考 http://dobon.net/vb/dotnet/control/buttonarray.html しかしなぜ100個のテキストボックスを用意しなければならないのか疑問が残ります。変数・配列に覚えさせれば済みます。時々値を変えたいのでしょうか。それでも配列の内容を変える方法は取れないのでしょうか。

kyo----
質問者

お礼

お返事ありがとう御座います!! 質問点がわかりにくくてすいません・・。 テキストボックスが100個・・・ っというのはあくまでも例で、実際自分がやりたいのは NO.3の方が答えてくれている方法です。 (これができない(:;)・・) 単純にオブジェクト(この場合ならTextbox1~100)を 変数を使用して表現できないものかなと・・・。 詳しくは私のNO3さんに対する御礼を読んでいただけると分かりやすいと思います。 宜しくお願い致します。

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.2

オブジェクトを配列にすればできますが・・・ そういうことを聞いてるのではないのでしょうか?

kyo----
質問者

お礼

さそsくのお返事ありがとう御座いますm(__)m。 オブジェクト配列・・・ですか。 ありがとう御座いました。 調べてやってみます!

kyo----
質問者

補足

質問の内容がわかりにくくて申し訳ありません。 私が最終的にやりたいのは、No3の方が答えてくれてる方法なのですが、これでやるとオブジェクトが認識されずにエラーが出てしまいます・・。 やはりVBAでは無理なのでしょうか(:;)

回答No.1

Dim i As Int16 Dim con As Control Dim con_name As String For Each con In Me.Controls For i = 1 To 100 con_name = "TextBox" & i If con.Name = con_name Then MsgBox(con.Text) End If Next Next でいいですか?

kyo----
質問者

お礼

さそsくのお返事ありがとう御座いますm(__)m。 なるほどぉ~。 自分はコントロールそのものを(オブジェクト名)をかえれないものかとあれこれなやんでいましたが、名前を見比べて処理をしているのですね! いちど試してみます。 ありがとうございました!

kyo----
質問者

補足

質問の内容がわかりにくくて申し訳ありません。 私が最終的にやりたいのは、No3の方が答えてくれてる方法なのですが、これでやるとオブジェクトが認識されずにエラーが出てしまいます・・。 やはりVBAでは無理なのでしょうか(:;)・・。