アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

テキストボックスにも種類があります。


図形のTextBox
フォームのTextBox
コントロールツールボックスのTextBox
種類はわかりますか?

図形のTextBoxならIndexを使えば良いと思います。
下記で数を取得できます。
ActiveSheet.TextBoxes.Count

2個しかないのならIndexは、1と2です。
ActiveSheet.TextBoxes(1).Select
ActiveSheet.TextBoxes(2).Select

ただしTextBoxesにはコメントの枠も含まれます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/07/19 20:22

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プロパティを取得できませんというエラーメッセージが出ました。

補足日時:2010/07/19 15:50
    • good
    • 0

初心者と称しながら、何をしようとするのか。


この課題は、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"
というようなものができれば要件が満たせます。

よろしくお願いします。

補足日時:2010/07/19 14:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!