• ベストアンサー

VBA Shapes コピーと名前

どうも、お世話になっています。 VBA初心者です。 エクセルのワークシート上の ActiveSheet.Shapes("Picture 1") を コピペするマクロを 作っているのですが あらたにコピーされた図形の名前を設定できますか。 出来たオブジェクトを選択するマクロができなくて困っています。 ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

バージョン幾つのエクセルを使っているのかによって,正しいマクロの書きぶりが変わる場合があります。 ご相談投稿時には,ご利用のソフト姪は元よりご利用のソフトのバージョンまでしっかり明記することを憶えてください。 >あらたにコピーされた図形の名前を設定できますか。 モチロンできます。 基本的なコツは,貼り付けた(新たな画像がシート上に発生した)直後にさっさと名前を付けてしまうことです。 作成例: sub macro1()  activesheet.shapes("Picture 1").copy  range("A10").select  activesheet.paste  selection.name = "Pict2" end sub #但し書き:今回のご相談とは全く無関係の部分で ご相談のようなヤリタイ事で,現実に大概問題になるのは「一体どんな名前にしたらイイ」のか,少なくともエラーが起きないマクロを書けるかという部分です。 もうちょっと作業を進めた後,必要に応じてまた別途ご相談を投稿してみてください。

mogurayama
質問者

お礼

すばやい回答有難う御座います。 <<直後にさっさと名前を付けてしまうことです。 なるほど、作った直後のセレクトされている内なら出来るということですね。 できるオブジェクトの名前を直接つけるのはできないんですね。 有難う御座います。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

私はShapeのRectangle 1でやったのですが シートSheet1に図形の長方形を1つ作っておく。 標準モジュールに Sub Macro4() Worksheets("Sheet1").Shapes("Rectangle 1").Copy 'Selection.Copy ActiveSheet.Paste Selection.Name = "aaa" End Sub を実行する。 コピーして貼り付けた直後の段階で、その図形がSelectされているので、間髪を入れず(他の操作が入らない段階で、ただプログラム実行中は普通は入らない)Selectionを使って取り出し(=オブジェクトを掴んで)、名前をつけてしまう。 ーー 確認用に 標準モジュールに Sub test01() For i = 1 To Worksheets("Sheet1").DrawingObjects.Count MsgBox Worksheets("Sheet1").DrawingObjects(i).Name Next i End Sub を作って、前記の貼り付け実行後、こちらを実行すると、「指定した名前で、長方形が増えている」ことがわかると思う。 ーーー この辺は私にとっては難しい(すっきりしない)点で、別のコードの書き方があるようにも思うが、今すぐは出てこない。 エクセル・バージョンによっても変わる恐れがあるように思う。

mogurayama
質問者

お礼

すばやい回答有難う御座います。 確認用も分かりやすく参考になりました。 <<間髪を入れずSelectionを使って取り出し名前をつけてしまう。 なるほど、No1さんと同様ですか。作っては消すということを繰り返すようなエクセルシートだと コピーした瞬間にできるオブジェクト名の数字がどんどん膨れ上がりますね・・・

関連するQ&A

専門家に質問してみよう