• ベストアンサー

マクロ初心者です。エクセルのあるシートにテキストボックスが2個張り付い

マクロ初心者です。エクセルのあるシートにテキストボックスが2個張り付いてます。 テキストボックスの番号はわからず任意に変化します。この2つのテキストボックスの番号を取得するマクロを教えて下さい。(テキストボックスの番号とは、テキストボックスを選択した時に名前ボックスに表示される番号のことです。)

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

テキストボックスにも種類があります。 図形のTextBox フォームのTextBox コントロールツールボックスのTextBox 種類はわかりますか? 図形のTextBoxならIndexを使えば良いと思います。 下記で数を取得できます。 ActiveSheet.TextBoxes.Count 2個しかないのならIndexは、1と2です。 ActiveSheet.TextBoxes(1).Select ActiveSheet.TextBoxes(2).Select ただしTextBoxesにはコメントの枠も含まれます。

MyPudding
質問者

お礼

助言ありがとうございます。 うまく処理できました! 明日までに解決しなければならなかったので、大変感謝しております。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

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

MyPudding
質問者

補足

助言ありがとうございます。 Test1()では何も表示しませんでした。 Test2()ではTextBoxクラスのindexプロパティを取得できませんというエラーメッセージが出ました。

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

初心者と称しながら、何をしようとするのか。 この課題は、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 をやってみて、 この(表示)結果をどうしようとするのか、 質問はこんなことではないのか、 補足のこと。 ーーー シートかフォームのどちらにコントロールを貼り付ける(た)のか コントロールツールボックスの方かフォームの方のテキストボックスか なども注記しておいた方が良い。 ーー >テキストボックスの番号とは、テキストボックスを選択した時に名前ボックスに表示される番号のことです。) デザインモードの時の話ではないですか。実行モードでは名前ボックスには出ないのでは。

MyPudding
質問者

補足

助言ありがとうございます。 実施したいことを、少し補足します。 実施したいことは、テキストボックスの値を変更したいのですが、テキストボックスの番号が固定ではなく任意に変更されるためテキスボックスを指定できない事に悩んでいます。 現プログラムは 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" というようなものができれば要件が満たせます。 よろしくお願いします。

関連するQ&A

  • 連番を変更するマクロ

    エクセルのあるシートにテキストボックスが100個張り付いてます。 番号は1から100です。 このテキストボックスの番号を21から120に変更するマクロを教えて下さい。 (テキストボックスの番号とは、テキストボックスを選択した時に名前ボックスに表示される番号のことです)

  • エクセルマクロ_テキストボックスをシートに反映

    エクセルマクロ初心者です。(2003使用_ユーザーフォーム) ユーザーフォームにリストボックスとテキストボックスを配置しています。リストボックス(Sheet1データを反映)の管理番号データを取得し、Sheet2のA1最終行に記載するところまではできました。 その後、もしテキストボックス1に日付型データ(回答日)があれば、先ほどの管理番号取得行の列のとなり(B列)に記載、空白であれば記載しない。 もしテキストボックス2に日付型データ(出荷予定日)があれば、先ほどの管理番号取得行の列のとなり(C列)に記載、空白であれば記載しない。 もしテキストボックス3にデータ(数量)があれば、先ほどの管理番号取得行の列のとなり(C列)に記載、空白であれば記載しない。 としたいのですが、offsetを使おうとしたのですが、うまくできませんでした。 すみませんが、どなたかご親切な方ご教授よろしくお願いいたします。 (エクセルSheet1=データベース) C5  D5 管理番号   品名       アカ12    りんご       アオ56    みかん       クロ34    なし       クロ89    すいか       アオ12    もも (エクセルSheet2=記入シート) 管理番号 回答日      出荷予定日 数量 アカ12 9月20日       9月23日 100 アオ56            9月21日 800 ↑回答日の記載はない場合もあります。 リストボックス1で選んだ管理番号取得行に一行に内容を表示させたいと思っています。 Private Sub UserForm_Initialize() With ListBox1 .ColumnWidths = "0;0;50;50" .ColumnCount = 4 .RowSource = "Sheet1!A5:D" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row End With End Sub Private Sub CommandButton1_Click() Dim lRow As Long With Worksheets("Sheet2") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2) End With (ユーザーフォーム配置)   リストボックス1   テキストボックス1(回答日=9/20)   テキストボックス2(出荷予定日=9/21) テキストボックス3(数量=900)  テキストボックス4(コメント=送り先一部変更あり) すみませんが、どなたかご親切な方ご教授よろしくお願いいたします。

  • テキストボックスを作成するマクロで

    エクセルでテキストボックスを50個表示させるマクロを作成する場合、テキストボックスの番号は連番になると思いますが、最初の番号を指定することは可能でしょうか? *この場合のテキストボックスの番号とはマクロ上の以下のような番号のことです。 ActiveSheet.Shapes("Text Box 8").Select

  • アクセスのフォームでテキストボックスを順番に選択

    任意の名前がついたテキストボックスがあります。 これをVBAを使い、1つずつ選択することは可能でしょうか? 例えばエクセルのシートだったら Sheets(1) みたいな感じで数字も使えますが、アクセスのフォームではできないのでしょうか? さらに取得していったテキストボックスの値を取得、ということもしたいです。 Access2000です。

  • テキストボックスの番号のことで

    エクセルでテキストボックスを使用するマクロのスクリプトを調べてみると、ActiveSheet.Shapes("Text Box 1").Select等の文からテキストボックスの番号が分かりますが、マクロを調べることなくシート上からテキストボックスの番号を知ることはできるのでしょうか?

  • エクセルのワークシート上のテキストボックスのずれ

    エクセルのワークシート上に(ユーザーフォームではなく) コントロールツールボックスからテキストボックスをいくつか作成しました。 そのテキストボックスをそれぞれ選択(アクティブ?マウスオーバー?)すると テキストボックスの大きさが微妙に変化してしまうのですが、回避する方法はないでしょうか? 微妙というのは、テキストボックスの下・右にそれぞれ枠線1本分ほどです。 エクセルのバージョンは2003です。 どうぞよろしくお願いいたします。

  • エクセル テキストボックスの内容を削除するマクロ

    シート上の任意のセルにカーソルがいたとして、マクロを実行するとテキストボックス1の事前の内容を全部消去してそのままそのテキストボックスの最初から入力可能な状態にするマクロを教えてください。

  • テキストボックスの名前

    エクセルシートにランダムに貼り付けられたテキストボックスの名前を調べるマクロを教えてください。 環境Windows XP Office 2003 目的 Sheet1にテキストボックスがたくさん貼り付けれられている。 テキストボックスの数と名前を知りたい。

  • エクセルのテキストボックスに関するマクロ

    テキストボックスが100個あって(番号は1から100)、文字が入力されているものと空白のものが混ざっています。 文字が入力されているテキストボックスに関しては内部を赤く塗りつぶす、というマクロを教えて頂きたいのですが。

  • エクセルマクロでシート内にある画像のみを選択する

    エクセルマクロでシート内にある画像のみを選択する ActiveSheet.DrawingObjects.Select これだとエクセルのシート内にあるすべてのオブジェクトを選択してしまいます。 テキストボックスなどのオブジェクトは選択せずに、写真などの画像のみを 選択したいのですがどのようにしたらよいのでしょうか。 どうかよろしくお願いいたします。

専門家に質問してみよう