プロが教える店舗&オフィスのセキュリティ対策術

VBAを使ってシート上の全てのテキストボックスのテキストを取得・出力するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいと思います。

環境:Windows10 Office2016

状況:
既存のエクセルシートに約100個以上のテキストボックスが作成されており
一覧を作成するためにセルにコピーしたい。

テキストボックスの並び順などは一切こだわりません。
そもそも実現可能かでもご存知の方いらっしゃいましたらお教えください。

質問者からの補足コメント

  • ご指摘いただいた通りオートシェイプです。
    おかげさまで無事プログラムは動作しましたが、1つ疑問があります。

    >Range("A1").Offset(i, 0).Value = tx.Name

     ...
     textbox 130
     textbox 162
     textbox 163

    上記は出力結果の例ですが、数字部分はテキストの作成順を表すものでしょうか。
    そうであれば、例えば新規に追加した図形は textbox 164 となるべきだと思いますが
    実際にはそのようにはなりませんでした。

      補足日時:2017/09/12 16:19

A 回答 (3件)

> 上記は出力結果の例ですが、数字部分はテキストの作成順を表すものでしょうか。


> そうであれば、例えば新規に追加した図形は textbox 164 となるべきだと思いますが

Excelが勝手に付ける番号って以上は、特に決まり無いのでは。
手動でtextbox 165とか、textbox 9999999とか作ったとして、次に連番振らなきゃならないって事もないでしょうし。


> If tx.Type = msoTextBox Then
> のほうが良いかと。

良さげですね。
    • good
    • 0

オートシェイプのテキスト ボックスなら


#1 さんの回答の IF は
If tx.Type = msoTextBox Then
のほうが良いかと。

というか、シートに張り付けられるテキスト ボックスは ActiveX コントロール版のテキスト ボックスもあります。
どちらのテキスト ボックスなのでしょうかね。

ActiveX コントロール版テキスト ボックスの貼り付け方法。
[開発]→[挿入]→[テキスト ボックス (ActiveX コントロール)]

オートシェイプ版テキスト ボックスの貼り付け方法。
[挿入]→[図形]→[テキスト ボックス]
    • good
    • 1

例えば、



Sub ttxtbox()
 Dim tx As Shape
 Dim i As Long
 i = 0

 ' アクティブシートのShape
 For Each tx In ActiveSheet.Shapes
  If tx.AutoShapeType = msoShapeRectangle Then ' オートシェイプの形が四角形?
   Range("A1").Offset(i, 0).Value = tx.Name
   Range("A1").Offset(i, 1).Value = tx.TextFrame.Characters.Caption
   i = i + 1
  End If
 Next
End Sub

だとか。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています