
アクティブセル値と同じオブジェクト名のテキストボックスが複数有ります。そのテキストボックスの大きさやテキスト(アクティブセル値と同じ)の内容に書き換えたいと思っています。
サイズとテキスト書き込みのステートメントを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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 複数セルに〇印をつけるマクロ 4 2022/09/07 05:33
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
エクセルのVBAコードと数式につ...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
【VBA】 結合セルに複数画像と...
-
vbsでのwebフォームへの入力制限?
-
算術演算子「¥」の意味について
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
vb.net(vs2022)のtextboxのデザ...
-
ダブルクリックで貼り付けた画...
-
VBAの「To」という語句について
-
VBAでユーザーフォームを指定回...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報