- ベストアンサー
マクロ初心者です。エクセルのあるシートにテキストボックスが2個張り付い
マクロ初心者です。エクセルのあるシートにテキストボックスが2個張り付いてます。 テキストボックスの番号はわからず任意に変化します。この2つのテキストボックスの番号を取得するマクロを教えて下さい。(テキストボックスの番号とは、テキストボックスを選択した時に名前ボックスに表示される番号のことです。)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
テキストボックスにも種類があります。 図形のTextBox フォームのTextBox コントロールツールボックスのTextBox 種類はわかりますか? 図形のTextBoxならIndexを使えば良いと思います。 下記で数を取得できます。 ActiveSheet.TextBoxes.Count 2個しかないのならIndexは、1と2です。 ActiveSheet.TextBoxes(1).Select ActiveSheet.TextBoxes(2).Select ただしTextBoxesにはコメントの枠も含まれます。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
Active X コントロールの場合は、Index はあるのですが、コレクションで指定できませんから、以下のような曖昧なコードから、選び出すことになります。一種類しかないのなら、そのままOLEObjectsから導きだしても可能です。 Index は、左上にあるものから、右下に順に番号がふられます。(移動すれば別です) '//ActiveX Sub Test1() Dim obj As Object With ActiveSheet For Each obj In .OLEObjects ''いろんな種類がある場合は、以下のようにしないと区別つかない。 If TypeOf obj.Object Is MSForms.TextBox Then ''obj.Select 'あまり働いていない。 MsgBox obj.Index & " " & obj.Name End If Next End With End Sub '//オートシェイプ Sub Test2() Dim o As Object With ActiveSheet For Each o In .TextBoxes 'VBA側では、隠しオブジェクになっています。 o.Select MsgBox o.Index & " " & o.Name Next End With End Sub
補足
助言ありがとうございます。 Test1()では何も表示しませんでした。 Test2()ではTextBoxクラスのindexプロパティを取得できませんというエラーメッセージが出ました。
- imogasi
- ベストアンサー率27% (4737/17069)
初心者と称しながら、何をしようとするのか。 この課題は、VBAの上級の課題と思います。 やりたいことの総体を示して、識者の批判を仰いではどうですか。 初心者はアイデア・発想そのものが、へんちくりん(難しくしすぎ)のことも多い。 シートにテキストボックスを貼り付けるのは、シートのセルを使うのと根本的には違いが無い。 普通はテキストボックスの名前は、ユーザーか設計者が付ける(つけられたままにして、それを使う)ものです。 それを判らないことにして、逆に調べる側に回るのは、初等・中等解説書などには解説は無いでしょう。 「テキストボックスの番号」というのがインデックス的番号のことなのか、名前の多分後尾につけている 数字のことか。これは設計者がやることだから、質問の文章だけでは読者には判らない Sub test01() MsgBox Worksheets("Sheet1").DrawingObjects(1).Name MsgBox Worksheets("Sheet1").DrawingObjects(2).Name End Sub または Sub test01() MsgBox Worksheets("Sheet1").OLEObjects(1).Name MsgBox Worksheets("Sheet1").OLEObjects(2).Name End Sub をやってみて、 この(表示)結果をどうしようとするのか、 質問はこんなことではないのか、 補足のこと。 ーーー シートかフォームのどちらにコントロールを貼り付ける(た)のか コントロールツールボックスの方かフォームの方のテキストボックスか なども注記しておいた方が良い。 ーー >テキストボックスの番号とは、テキストボックスを選択した時に名前ボックスに表示される番号のことです。) デザインモードの時の話ではないですか。実行モードでは名前ボックスには出ないのでは。
補足
助言ありがとうございます。 実施したいことを、少し補足します。 実施したいことは、テキストボックスの値を変更したいのですが、テキストボックスの番号が固定ではなく任意に変更されるためテキスボックスを指定できない事に悩んでいます。 現プログラムは ActiveSheet.Shapes("Text Box 178").Select Selection.Characters.Text = "1234" ActiveSheet.Shapes("Text Box 188").Select Selection.Characters.Text = "5678" としており、変更したい先のText Box の「178」、「188」の値がシート毎に任意に変わりセレクトできません。 よって、何とかしてテキストボックスの番号の値を予め取得し、値を変更したいと思っています。 例えば A=テキストボックスの値を取得する関数 B="Text Box " & A ActiveSheet.Shapes(B).Select Selection.Characters.Text = "1234" というようなものができれば要件が満たせます。 よろしくお願いします。
お礼
助言ありがとうございます。 うまく処理できました! 明日までに解決しなければならなかったので、大変感謝しております。