次の方法で共有

excel2007 挿入>テキストボックスの取り扱いについて質問

Anonymous
2015-10-20T07:39:54+00:00

エクセルにテキストボックスは3つもあるとききました。というくらいテキストボックスについて素人です。

挿入リボンの「テキストボックス」>「横書きテキスト ボックス」で作られるテキストボックスについての質問です。

これで作ったテキストボックスが存在するシートがあります。このシートを新しくすることになり、テキストボックスに書かれた値、文字列をすべて新規シートのセルに移動させる作業が発生しました。1つづつ該当する新しいセルにデータをコピーしたいんです。

1シート中にテキストボックスが25個、シートは400枚ほどあります。

VBAでデータをコピーする処理を作ろうとしています。

セルの中身を別シートの該当セルに移すことはできますが、テキストボックスの中身を移せません。

Cells(vK, 2).Value = WorkSheets(vi).TextBox("Text Box 15").Value  

   'vK,viは変数です。"Text Box 15"はテキストボックスを選んだときに左上に表示される名前です。

というような感じでいけるかと思ったら、

「オブジェクトは、このプロパティまたはメソッドをサポートしていません」’438’

とのことで、ダメでした。

これをうまくいかせるために、テキストボックスについて知る必要があると思いました。

そこで質問です

TextBoxを調べると、たいていのサンプルには .TextBox("Text Box 15") のくだりは TextBox1. と書かれていますが、

質問1)3つあるというテキストボックス。ネットで調べていても、そのページの記述が3つのうちのどのテキストボックスのことかどうすればわかるのでしょうか?3つの違いについて書いているサイトすら見つけられなかったので、詳しいかたそんなページを教えていただけるととてもうれしいです。

質問2)今選ばれているテキストボックスのTextBox1という書き方の呼び名?はどうすれば調べられますか?

質問3)テキストボックスは名前を付けられない? 名前で指定できない?rangeやsheet等とは違うようなので。

本当に素人なものでばかみたいなことを訊いていることと思いますが、よろしくお願いします。

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

5 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2015-10-22T08:49:13+00:00

    >メソッドをサポートしていません」”438”

    Shapeは線とかそういうものも含まれます。

    ですからテキストボックス以外のShapeがあれば引っかかってきてしまう訳です。

    線には文字列は入れられませんから、TextFrameなんてプロパティは存在しないって怒られるわけです。

    まあ、いくつか手段はあるのですが、要するに、Shapeの中からテキストボックスのみを抜き出して処理すれば良いわけです。

    Sub ddd()

    Dim wShape As Shape

    For Each wShape In Worksheets("sheet1").Shapes

      If wShape.Type = msoTextBox Then

        MsgBox wShape.Name

        MsgBox wShape.TextFrame.Characters.Text

        MsgBox wShape.TopLeftCell.Address

      End If

    Next

    End Sub

    このコードをシート名だけ変更して問題のシートで走らせてみてください。

    名前⇒これは処理には不要なはずです。

    テキスト⇒これが眼目

    TopLeftCell⇒多分テキストを格納することにしたいセルのアドレスです。

    ただし、テキストボックスと考えられているものに、四角なんかがまぎれているとこれだけではダメなので、また別の手を考える必要がでてきます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2015-10-22T08:24:32+00:00

    1シートにテキストボックスは25個あるのはわかっています。

    なので、名前がわかれば、その名前から内容を取り出して、新しいセルにひとつひとつ対応づけたものをプログラムするのは難しくないと思っています。

    sakudaさんのプログラムをもとに、ひとまずシェイプの名前とテキストを拾ってセルに入れることをやってみました。

    Sub ボタン1_Click()

    Dim wShape As Shape

    With Worksheets("001A")

     For i = 1 To 25

      Set wShape = .Shapes(i)

        wShape.Select

        Cells(i + 10, 15) = Selection.Name

        Cells(i + 10, 16) = .Shapes(i).TextFrame.Characters.Text   ---A

      Next i

    End With

    Aの部分で「オブジェクトはこのプロパティもしくはメソッドをサポートしていません」”438” と言われます。

    Aを省けば、シェイプの名前がすべて取得できました。

    テキストボックスではないシェイプを探しに行ったときにエラーが出ているんでしょうか。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2015-10-22T02:41:03+00:00

    >textbox1.value 

    これはActiveXのテキストボックスでしょう

    しかし、沢山あるというのでしたら、本当にすべてテキストボックスなんでしょうか?

    人によっては、四角、吹き出し形、楕円なんかをデザインとして流用することが結構あるはずです。

    ですから、数百もあるのでしたら、名前でひっかけるのではなく、For Each ですべて洗い出すのが正解のように思います。

    ただ、その場合でもActiveXなんかが混じっていることも考えられるので、結果をよく確認して、もれがあれば別途対応するなどが必要になるでしょう。

    それから簡単にA1の所にあればA1に移すとおっしゃってますが、Shapeはセルとリンクしているわけではありませんから、簡単には行きません。

    位置決めの方はまだ何も考えてませんが、この辺の解決がついていないなら、アドバイスできるかどうか考えて見ます。

    (For Eachの方はいくらでもお相手できます)

    H27.10.22追記

    Shapeが存在するセルについてですが、TopLeftCell プロパティでレンジが取得できますね

    ただ、Shapeが楕円なんかの場合とか角が丸くなった四角なんかだと、見かけ上図形が外れているセルが出てきてしまいますねw

    (Excelが認識するShapeの範囲は選択した時出てくる周囲線らしいです)

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2015-10-22T01:03:36+00:00

    もう一度やりたいことを説明します。

    セルにいれる形で作るべきリストを、テキストボックスを並べて作ったシートがあります。

    A1のセルに文字や値が入っているのでなく、A1のセルの場所にテキストボックスがあり、そこに文字や値が入っています。

    これを、A1のセルに文字や値を移したいんです。

    よくネットの説明で「テキストボックス」で調べると

    textbox1.value textbox1.text 

    と書いているのはshapeのテキストボックスではないということですか?

    であれば、いくらこの調子で書いても動かないわけがわかりました。

    shape で探せばいいんですね。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Anonymous
    2015-10-20T15:36:00+00:00

    どこまで、やる事が分かってらっしゃるのか不明ですが・・・・

    テキストボックスの中身を取り出すのはそんなに単純ではありません。

    ↓はシート1にテキストボックスが一つあり、そこにテキストが入っている時、それを取り出すサンプルです。

    Sub aaa()

    Dim wShape As Shape

    With Worksheets("sheet1")

      Set wShape = .Shapes(1)

      MsgBox wShape.TextFrame.Characters.Text

    End With

    End Sub

    選択状態の図形の名前は

    Sub bbb()

    MsgBox Selection.Name

    End Sub

    ただし、日本語では出てこないようです。

    テキストボックスはShapeですから、名前は作成された時、Excelが通し番号でつけます。

    実際にそういうシートを作成する場合、一度削除してもう一回やり直す等が起こりますので、番号は歯抜けになりますので、特定のテキストボックスを選択することだって、名前を指定できるのでなければ結構面倒な話ですし、テキストだってフォントが変更されていたり、書式がはいっていたりでしょうから、単にテキストを移すと言うだけで済むとはおもえません。

    後の質問ですが、テキストボックス3種というのはこういうことかなとおもいます。

    図形で挿入されるものの他に、ActiveX(VBAでユーザーフォーム上で使うもので、シート上にもつくれます)のテキストボックスはあります。

    また、フォームコントロールのテキストボックスもありますが、これはShapeのものと大差ないようなきがしますので、3種類なのかな?

    ただ、実際につかっているのが図形のものなら、それ以外は意識するひつようはないでしょう。

    また、名前は作成されるとき勝手につきますが、後で修正は可能です。

    名前欄を選択状態にして変更するだけです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません