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

アクティブセル値と同じオブジェクト名のテキストボックスが複数有ります。そのテキストボックスの大きさやテキスト(アクティブセル値と同じ)の内容に書き換えたいと思っています。

サイズとテキスト書き込みのステートメントを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

A 回答 (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
    • good
    • 0
この回答へのお礼

原因の解説ありがとうございます。
なるほど、Selectせているのダメなのですね。
まだまだ未熟で「マクロの記録」に頼る部分も多く、中々その辺りが理解出来ていませんでした。

お礼日時:2008/05/27 10:00

疑問点


(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つのシェイプのテキストボックスに対し、文字の設置と、フォントの設定、ボックスのサイズ設定はうまく行った。
参考に。
ただし、>そのテキストボックスの大きさやテキスト(アクティブセル値と同じ)の内容に書き換えたいと思っています。
が、小生の浅学か、出来てない。
    • good
    • 0
この回答へのお礼

ありがとうございます。
(2)(3)についてはNo,1さんのお手数ですが、お礼欄参照してください。
(1)私は何時も値を取得するのにFormulaを使っていますが、Valueでも可能なのでしょうか?チョット良く判りません。

人間がアクティブにせずに実行したいと思っています。
説明不足の性で混乱を招いた様で申し訳ありませんでした。

お礼日時:2008/05/27 09:56

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
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
説明不足で申し訳有りません。これ以外の部分は雑多になる為省いていました。
1・
コレとは別のプロシージャーでセルの値(同列に1~順番に並んだ複数の値)と同じ名前を持ったオブジェクトを作成しています。
2、3・
この文は本来同列に入力されている値のMinとMaxを取得して、Min=MaxとなるまでDo Whilで繰り返しています。

お礼日時:2008/05/27 09:44

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