![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
アクティブセル値と同じオブジェクト名のテキストボックスが複数有ります。そのテキストボックスの大きさやテキスト(アクティブセル値と同じ)の内容に書き換えたいと思っています。
サイズとテキスト書き込みのステートメントをFor Eachで括りました。
途中にMsgboxを入れて確認するとボックスの数だけ繰り返しているのは間違いないのですが、変更できるのは1個だけです。
最初に作った(?)テキストボックスのみを何度も書き換えているのかな?と思っているのですが、複数個の変更をするにはどの様にしたらいいのでしょうか。
宜しくお願い致します。
Sub test()
A = ActiveCell.Formula
For Each shp In ActiveSheet.Shapes
If shp.Name = A Then
ActiveSheet.Shapes(A).Select
Selection.ShapeRange.Height = 19.5
Selection.ShapeRange.Width = 19.5
With ActiveSheet.Shapes(A).TextFrame
.Characters.Text = A
End With
With Selection.Font
.Size = 7
End With
End If
Next shp
End Sub
No.3ベストアンサー
- 回答日時:
For Each shp In ActiveSheet.Shapes
で全シェープを1個づつチェックしているのに、途中で
ActiveSheet.Shapes(A).Select
とか
With ActiveSheet.Shapes(A).TextFrame
としているために、変数Aに格納されている名前のシェープの「最初のシェープ」を選んで、そのシェープに対して各種設定しているためだと思います。
で、以下みたいでどうでしょうか?
Sub test1()
Dim A As String
Dim shp As Shape
A = ActiveCell.Formula
For Each shp In ActiveSheet.Shapes
If shp.Name = A Then
shp.Select
Selection.Height = 19.5
Selection.Width = 19.5
Selection.Text = A
Selection.Font.Size = 7
End If
Next shp
End Sub
または
Sub test2()
Dim A As String
Dim shp As Shape
A = ActiveCell.Formula
For Each shp In ActiveSheet.Shapes
If shp.Name = A Then
shp.Height = 19.5
shp.Width = 19.5
shp.TextFrame.Characters.Text = A
shp.TextFrame.Characters.Font.Size = 7
End If
Next shp
原因の解説ありがとうございます。
なるほど、Selectせているのダメなのですね。
まだまだ未熟で「マクロの記録」に頼る部分も多く、中々その辺りが理解出来ていませんでした。
No.2
- 回答日時:
疑問点
(1)A = ActiveCell.Formula
はA = ActiveCell.Valueでは
(2)Shapesを探すのに繰り返しているが、Aのほかに繰り返さなくて良いのかな。Aが複数あるという全提でこうなるのか。
(3)アクティブセル値と同じオブジェクト名のテキストボックスが複数有ります
テキストボックスには「オブジェクト名」しかないと思うがどういうこと。
ーーー
私の場合、オートシェイプの横書きテキストボックスを1つ張り付け。
その名前がText Box 3であるので
A1にText Box 3 を入れてアクチブにして下記を実行。
Sub test03()
Dim shp As Object
A = ActiveCell.Value
For Each shp In Worksheets("Sheet1").Shapes
If shp.Name = A Then
MsgBox shp.Name
ActiveSheet.Shapes(A).Select
Selection.ShapeRange.Height = 19.5
Selection.ShapeRange.Width = 40
ActiveSheet.Shapes(A).TextFrame.Characters.Text = "SSA"
ActiveSheet.Shapes(A).TextFrame.Characters.Font.Size = 17
End If
Next
End Sub
で1つのシェイプのテキストボックスに対し、文字の設置と、フォントの設定、ボックスのサイズ設定はうまく行った。
参考に。
ただし、>そのテキストボックスの大きさやテキスト(アクティブセル値と同じ)の内容に書き換えたいと思っています。
が、小生の浅学か、出来てない。
ありがとうございます。
(2)(3)についてはNo,1さんのお手数ですが、お礼欄参照してください。
(1)私は何時も値を取得するのにFormulaを使っていますが、Valueでも可能なのでしょうか?チョット良く判りません。
人間がアクティブにせずに実行したいと思っています。
説明不足の性で混乱を招いた様で申し訳ありませんでした。
No.1
- 回答日時:
1.
Text Boxの名前はいつ、どこで、どういう風に決めているのですか。オブジェクト名が同じText Boxなんてありません。全部名前が違うはずです。
2.
はじめにAをActiveCellからとっていて、For文実行中、Aは変わらないからいつも同じだ。
3.
If文で名前がAだったらといっているので、何回繰り返そうと、Aは同じだから、なまえがAのText Boxがあったとしたら、それしか変更されない。
4.
つぎのようにすれば、全部変更するが、特定の名前のText Boxだけ変更したいなら、If文のAが変わっていくようにしなければだめだ。
Sub test()
A = ActiveCell.Formula
For Each shp In ActiveSheet.Shapes
MsgBox shp.Name
'If shp.Name = A Then
'ActiveSheet.Shapes(A).Select
shp.Select
Selection.ShapeRange.Height = 19.5
Selection.ShapeRange.Width = 19.5
'With ActiveSheet.Shapes(A).TextFrame
With shp.TextFrame
.Characters.Text = A
End With
With Selection.Font
.Size = 7
End With
'End If
Next shp
End Sub
早速のご回答ありがとうございます。
説明不足で申し訳有りません。これ以外の部分は雑多になる為省いていました。
1・
コレとは別のプロシージャーでセルの値(同列に1~順番に並んだ複数の値)と同じ名前を持ったオブジェクトを作成しています。
2、3・
この文は本来同列に入力されている値のMinとMaxを取得して、Min=MaxとなるまでDo Whilで繰り返しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
エクセルのVBAの標準モジュール...
-
「Columns("A:C")」の列文字を...
-
VBAからPDFファイルにパスワー...
-
Excel VBAでWordの複数ファイル...
-
エクセルマクロエラー「'Cells'...
-
Excel VBAでIEにアクセスするプ...
-
VBAで既に開いている別アプリケ...
-
VBAについてです。 初心者です...
-
EXCEL VBA オートシェイプナン...
-
表示されるまで待たせたい
-
VB6 ファイルのリネームの仕方
-
テキストボックス中の文字列の...
-
VBA オブジェクトが空かどうか...
-
オブジェクト名が同じ図形の変更
-
実行時エラー 3265「要求された...
-
オブジェクトが見つかりません
-
エクセルVBAでFor each文
-
ADO 「NEW」の意味、必要性
-
パワーポイント filedialogでフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
EXCEL VBA オートシェイプナン...
-
VBAからPDFファイルにパスワー...
-
VBAで Set wb = Sheets(1).Cop...
-
ある文字列が全て数字であるか...
-
PowerPointVBAでスライドマスタ...
-
[VBA]CDOメッセージ送信エラー
-
AccessVBAで「dim dbs as datab...
-
VBAで作成するメール(開封確認...
-
VBからPDFファイル自動生成...
-
上下の位置揃えについて
-
ExcelVBAでのNZ関数について
-
テキストボックス中の文字列の...
-
エクセルマクロエラー「'Cells'...
おすすめ情報