• ベストアンサー

大量のオブジェクトで同様のイベント処理をしたい場合の記述

shigatsuの回答

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.1

Controlsコレクションを使ってみたらいかがでしょうか? 使い方はヘルプを見てください。 要はフォーム上のオブジェクトをぜーんぶ配列にしちゃったようなもんです。

gutiguti
質問者

補足

早速のご解答ありがとうございます。 Controlコレクションは1つのイベントに対して複数のコントロールを一括処理する場合には使えますよね。(たとえば、あるCommandButtonオブジェクトをクリックしたら全てのTextBoxオブジェクトをクリアするなど…) 質問は、複数のオブジェクトで発生するイベントに対して一括でコードを記述したいということです。イメージ的には下記のような記述方法がないかということです。(下記のコードそのものは動きません。無理がありますね・・・) コードの美しさの問題だけなのですが・・・ 例) For Each MyTextBox In Controls  Sub MyTextBox_change()   ・・・・・  End Sub Next MyTextBox 『無理に決まってんじゃん』と断定できる方がいましたら(笑)、私に引導を渡して下さい。よろしくお願い致します。

関連するQ&A

  • 複数のテキストボックスのカンマ処理

    現在、ユーザーフォームに60個のテキストボックスを設置しています。 数値入力されるとカンマが付くようコードを書いているのですが、まとめて処理できるようなコードはないでしょうか? 現在… Private Sub TextBox1_Change() TextBox1.Text = Format(TextBox1.Text, "#,##0") End Sub Private Sub TextBox2_Change() TextBox2.Text = Format(TextBox2.Text, "#,##0") End Sub Private Sub TextBox3_Change() TextBox3.Text = Format(TextBox3.Text, "#,##0") End Sub これを60個 試しにfor~Nextで書いてみましたが、失敗しました。 Dim c As Integer For c = 1 To 60 Controls("TextBox" & c).Text = Format("TextBox" & c.Text, "#,##0") Next End Sub ご存知の方、お力を貸してください。 ウィンドウズ7のエクセル2013を使用しています。

  • エクセルVBA フレーム内のイベント

    フレーム内に、テキストボックスを配置し、 そのテキストボックスをExitした場合にFormatを変更したいのですが、 フレーム内にテキストボックスがあるためかイベントが発生しません。   1) Frame1 の中に Textbox1 を配置   2) Textbox1には数値を入力   3) 入力後、次のコントロールに移動した場合、    Textbox1.textをformat(Textbox1.text,"#,##0")にする   Private Sub Textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)     msgbox "Exit"   End Sub   としましたが、ユーザフォームを終了した時に、msgが出力されます。 フレーム内のイベントはどのようにすればよいか、教えていただきたいです。 よろしくお願いいたします。

  • エクセルVBA 計算の繰り返し処理?

    エクセルのVBA フォーム内にて 下記、各テキストボックスの数値を変更することにより Label27にLabel28*TextBox12+TextBox13+TextBox14 Label33にLabel34*TextBox16+TextBox17+TextBox18 Label27、Label33に計算の答えを書き込みたいため 下記のように書き込みました。 Private Sub TextBox12_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox13_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox14_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox16_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub Private Sub TextBox17_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub Private Sub TextBox18_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub 計算は出来るのですが計算ラベル50程あるため、修正を考えて ももう少し簡素化して書き込みたいため 調べましたがヒント項目がずれているせいか回答を検索できませんでした。 どのようにすれば宜しいかご教示の程宜しくお願いいたします。

  • ユーザーフォームのテキストボックスの書式設定について

    ユーザーフォームのテキストボックスの書式設定について TextBox1に金額、TextBox2に日付を入力し、Sheet1に転記するような フォームを作っています。 TextBox1には、 Private Sub TextBox1_Change() y = TextBox1.Text TextBox1.Text = Format$(CLng(y), "#,##0") End Sub としています。 TextBox2には、書式をH○○.○.○という設定にしたいのですが、 どのようにしたらよいでしょうか。

  • VBAについての質問です。初心者です。

     はじめまして。  VBA初心者です。  よろしければお願いします。  Changeイベントプロシージャを使い  テキストボックス1に  テキストボックス2と3から導き出せる答えを  コマンドボタンを押さずに  数字を入力しただけで表示されるようにしたいのですが。  コマンドボタンを作って、押したとき。  コマンドボタンを作らなくても、  テキストボックス1のところで何かタイピングしたとき。  は表示できるようになったのですが、  2と3に入れただけで  1が表示される  という状態にできません…。  質問内容の説明がわかりにくいと思いますが  補足などもちろん何でもしますので  よろしければご回答お願いします。  現時点で、スペースボタンなど  何かしら1のボックスでタイピングした場合に出る状態は Private Sub TextBox1_Change() TextBox1.Value = TextBox3.Value / TextBox2.Value End Sub  です。

  • Accessで同じ処理を記述するとき

    Access2002を勉強しています。 次のようなプロシージャで疑問を持ちましたので教えてください。 (例) Private Sub AAA()   処理1   処理2   End Sub Private Sub BBB()   処理1   処理3   End Sub Private Sub CCC()   処理1   処理4   End Sub (例)で示す通り同じ内容の処理があるとき、それぞれに同じ内容の処理を記述していますが、何か良い記述の方法があるような気がしますが? 私の思い過ごしでしょうか。教えてください。

  • Excel VBA イベントプロシージャを2つ記述する(基本です)

    基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • TEXTBOX_CHANGEのイベント抑制

    TEXTBOX_CHANGE イベントでのイベント抑制方法を教えてください。 エクセルのVBAで、ユーザーフォーム内のTEXTBOXの内容を変更した際にイベントが発生しない様にしたいのですが、うまくいきません。 Private Sub TextBox1_Change() Application.EnableEvents = False UserForm1.TextBox1.Text = "" Application.EnableEvents = True UserForm1.TextBox1.SetFocus End Sub  ユーザーフォーム内では Application.EnableEvents  は使えないのかな?? どなたかご教授をお願いします。

  • 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の値しか表示できないようにしたいです) どうかご回答よろしくお願いいたします。