• ベストアンサー

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/17068)
回答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では無理なのでしょうか(:;)・・。

関連するQ&A

  • VB2010入力制御について

    ・計算機アプリケーションです ・テキストボックスは数値と「-(マイナス)」「.(小数点)」以外は入力できないように制御しています。 ・テキストボックス1と2に入力したものをボタン1を押して計算し、ラベル2に表示します。 テキストボックスに数値以外が、もしくは「3-2」「.32」「32.」等の不正な値が入った場合に、メッセージボックスを出して入力の誤りを指摘するプログラムを書きたいです。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ If Not IsNumeric(TextBox1.Text) Then MsgBox("不正な値です", vbExclamation, "ERROR") Label2.Text = "ERROR" ElseIf Not IsNumeric(TextBox2.Text) Then MsgBox("不正な値です", vbExclamation, "ERROR") Label2.Text = "ERROR" End If End Sub 色々と調べてみて、IsNumericが使えそうだったのでこのプログラムを書いたのですが、 これだと「-」や「.」だけを書いた場合にはちゃんとエラーメッセージが出ますが、 「32-」「.32」「32.」等は数字だけを認識して、計算結果を表示してしまいます。 何が足りないのか、もしくは使用している関数を変えたほうがいいのか、アドバイスいただければ幸いです。 以上、ご回答宜しくお願い致します。

  • VBのパスワードに関して

    VBのパスワードについて質問です。 今ソースに書いたパスワードを認証させて、Form2に移動させようと思っています。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If TextBox1.Text = "1234" Then MsgBox("パスワードが正しく入力さました") Dim frm2 As New Form2 frm2.Show() Else MsgBox("パスワードが正しくありません") Me.close() End If End Sub End Class 上記で質問があります。 まずForm1には TextBox1 .. 5 まで設置しています。 上記のソースだと"TextBox1"の"指定文字"が正しければ、 MsgBox("パスワードが正しく入力さました")と表示しますが、 これを増設したいのです。 例えば [TextBox1] - [TextBox2] - [TextBox3] - [TextBox4] - [TextBox5] [Button1] にしたいのですが、ソースコードはどの様になりますか? 順番としては1から5の小さい値でOKであれば認証する。 あと何処かで見たのですが、 これに起動の回数制限を設けたいと思っています。 その方法も教えて頂ければありがたいです。 また外部者から逆コンパされない様に暗号化方法も教えて欲しい! 私は一切、Web系の認証はしないので・

  • VB6.0でのTextboxの高さ変更

    VB6.0を使用しています。 下記のようにテキストボックスを動的配置した際にボックスの高さを変更したいのですが、文字の大きさ等に依存しているよう?で変更できません。 よく似た質問でMultiline をTrueにするような物があり、試してみましたがエラーとなってしまいます。 もう少し小さくしたいのですが何を変更・追加すればよいのでしょうか? どなたかご教授願います。 Private Sub Form_Load() Dim add_tbox As TextBox Set add_tbox = Controls.Add("VB.textbox", "text") With add_tbox .Text = "aaa" .Height = 240 '---テキストボックスの高さ .Left = 2270 .Top = 1700 .Width = 350 .FontSize = 9 '.MultiLine = False ---これを追加するとエラー"値の取得のみ可能なプロパティに値を設定する事はできません" .Visible = True End With MsgBox add_tbox.Height '---テキストボックスの高さ確認(270となっている) End Sub

  • VB2008EEのチェックボックスにて、

    VB2008EEのチェックボックスにて、 9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、 一旦チェックをオンにすると値が入ったままになって、オフにしても表示されてしまうため チェックがオフのものはボタン1クリックで空にしています。 1~9まであるのですが、1~4までは機能しているのですが、5~9が機能しません。 1~4にチェックが入っていると下記は実行されません。 5~9にチェックが入っていても下記が実行されてしまいます。      (実際は各番号)         ↓ If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "" End If なぜ4までと5からで動作が変わるのでしょうか? -------------------------------------------------------------- Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp1 = "1" End Sub '実際は2~8も記述あり Private Sub CheckBox9_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp9 = "9" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal eAsSystem.EventArgs) Handles Button1.Click If CheckBox1.CheckState = CheckState.Unchecked Then layp1 = "" End If '実際は2~8も記述あり If CheckBox9.CheckState = CheckState.Unchecked Then layp9 = "" End If If (layp1 = "1") Then TextBox1.Text = "aaaaa" End If If (layp2 = "2") Then TextBox2.Text = "bbbbb" End If If (layp3 = "3") Then TextBox3.Text = "ccccc" End If If (layp4 = "4") Then TextBox4.Text = "ddddd" End If If (layp5 = "5") Then TextBox5.Text = "eeeee" End If If (layp6 = "6") Then TextBox6.Text = "fffff" End If If (layp7 = "7") Then TextBox7.Text = "ggggg" End If If (layp8 = "8") Then TextBox8.Text = "hhhhh" End If If (laypca = "9") Then TextBox9.Text = "iiiii" End If End Sub

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • VBのプログラム

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Not Integer.TryParse(TextBox1.Text, rows) OrElse _ Not Integer.TryParse(TextBox2.Text, columns) OrElse _ Not Integer.TryParse(TextBox3.Text, number) Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If Me.Bounds = New Rectangle(10, 10, 1300, 900) Dim cnt As Integer = 0 For k As Integer = 1 To number For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 tb.Name = "tb" + cnt.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 20 + 70 tb.Left = (j - 1) * 50 + 60 * (columns * (k - 1)) + 5 tb.Width = 55 Next Next Next End Sub これはボタンを押すと テキストボックスに入力された値分だけテキストボックスが出てくるというものです。 例えば 3 4 4とテキストボックスに値が入力された場合 3行4列が4個分テキストボックスが出てきます。 しかし6 6 6と入力した場合画面に入りきらなくなってしまいます。 大きな値を入力しても画面に入れたいです。 これはスクロールなどしてできるようにしたいです。 どのようなソースでできるのでしょうか。

  • 変数とループを使ったマクロについて

    恐縮ですが、ご教示をお願い致します。 comboboxの値を空白のtextboxに貼り付けるものです。 本を片手にマクロを作成していたのですが、上手くいかず困っております。 作成したマクロ Private Sub CommandButton100_Click() '入力値のチェック If ComboBox1 = "" Or ComboBox2 = "" Then GoTo 998 '空白ボックスを検索しデータ入力 If TextBox11 = "" And TextBox12 = "" Then TextBox11 = ComboBox1 TextBox12 = ComboBox2 GoTo 999 End If If TextBox21 = "" And TextBox22 = "" Then TextBox21 = ComboBox1 TextBox22 = ComboBox2 GoTo 999 End If If TextBox31 = "" And TextBox32 = "" Then TextBox31 = ComboBox1 TextBox32 = ComboBox2 GoTo 999 End If ↓ ↓  以下50個あります。 ↓ If TextBox501 = "" And TextBox502 = "" Then TextBox501 = ComboBox1 TextBox502 = ComboBox2 GoTo 999 End If 998 MsgBox "入力値に誤りがあります 999 End Sub とてつもなく長くなってしまいました。 変数をループを使って色々やってみたのですが、どうにもならず。。。 簡単に変数及びループを使用して纏める事は出来る物なのでしょうか? よろしくお願いいたします。

  • vbのsavefiledialogについて

    vbで、テキストボックスに、文字を入力し、ボタン2をクリックすると、ユーザーが指定したところに、指定した名前で、txt形式、html形式、doc形式(このうち、txtと、htmlは必須。)で保存するプログラムを作りたいと思っております。 サイトを見てみますが、なかなかよいものが見つかりません。どなたか教えてください。 書きかけのプログラムと、フォーム図を載せておきます。 また、変更した方がよければ、そちらもおしえてください。 Public Class Form1 Dim texta As String Dim a Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "リセット" Button2.Text = "保存" texta = TextBox1.Text End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged texta = TextBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = DialogResult SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.FileName = "" SaveFileDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" a = SaveFileDialog1.ShowDialog If a = Windows.Forms.DialogResult.OK Then Label1.Text = IO.Path.GetDirectoryName(SaveFileDialog1.FileName) Label2.Text = IO.Path.GetFileName(SaveFileDialog1.FileName) Else Label1.Text = "キャンセルされました。" Label2.Text = "" End If End Sub End Class

  • Private Sub Workbook_BeforeSaveについて

    エクセル2000です。 腑に落ちない現象が起きているので質問させてください。 Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheet1.TextBoxes("テキスト").Visible = True Sheet1.Buttons("ボタン").Visible = True MsgBox "保存されちゃった!" End Sub と書いてみました。 手動で保存する場合には正しく、テクストボックスやボタンは正しく表示されます。もちろんMsgboxも出ます。 ところが、標準モジュールに書いた以下のコード、 Sub 保存() ActiveWorkbook.Save End Sub を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。 試行錯誤の結果、 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheet1.Shapes("テキスト").Visible = True Sheet1.Shapes("ボタン").Visible = True MsgBox "保存されちゃった!" End Sub と書くと、標準モジュールから、ActiveWorkbook.Saveでも表示されることがわかりました。 どうしてでしょうか?

  • ExcelVBA スピンボタンの値について

    参考書を片手に勉強中のエクセルVBA初心者です。 ぜひアドバイスをお願いします…! Excel2000でユーザーフォームを作成し、スピンボタンを使用して数値を指定できるよう、以下のソースを記述しました。 ----------------------------------------- Private Sub UserForm_Initialize() With SpinButton1 .Min = 20 .Max = 150 .Value = 150 .SmallChange = 5 End With End Sub ----------------------------------------- Private Sub SpinButton1_Change()   TextBox1.Value = SpinButton1.Value / 10 End Sub ----------------------------------------- Private Sub TextBox1_Change()   TextBox1.Text = Format(TextBox1.Text, "0.0") End Sub ----------------------------------------- これを、スピンボタンも使用でき、かつ手入力にも対応するように動作させたいと考えています。 具体的にはテキストボックスに6(ランダムな値)と手入力後、 スピンボタンを使用してで6.0の値から増減させたいのですが、 そのようなことは可能でしょうか? 可能であれば、どのようにすればよいのでしょうか? (テキストボックス内の値は、小数点第1位まで表示させ、2.0~15.0の値しか表示できないようにしたいです) どうかご回答よろしくお願いいたします。

専門家に質問してみよう