システムメンテナンスのお知らせ

エクセル2013のVBAで図形をカットして、別の位置に貼り付けるのに、下記のコードで動作させて一応問題なく動作しています。

Sub sample()
ActiveSheet.Shapes("角丸四角形 10").Cut
Cells(1, 1).Select
ActiveSheet.Paste

End Sub

これを、もう少し修正して

ActiveSheet.Shapes("角丸四角形 10").Cut
ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAllUsingSourceTheme

このように書くと、
実行時エラー1004
RangeクラスのPasteSpecialメソッドが失敗しました

となり、

ActiveSheet.Shapes("角丸四角形 10").Cut Destination:=ActiveSheet.Range("A1")

このように書くと、
実行時エラー1004
アプリケーション定義またはオブジェクト定義のエラーです

となってしまいました。
図形の貼り付けは一度貼り付け場所をselectしないと貼り付けられないのでしょうか?
またはどのように書けばよいのでしょうか?

gooドクター

A 回答 (2件)

こんなんでいかがでしょう。



ActiveSheet.Shapes("角丸四角形 10").Cut
ActiveSheet.Paste Destination:=Range("A1")

ちなみに、"角丸四角形 10" は切り取られて、無くなってしまいます。
ペーストされたものには、別の名前が付きます。
    • good
    • 4
この回答へのお礼

どうもありがとうございます。微妙な違いですがこれだと動作しました。ペーストしたものは、別の名前が付くとのことでしたが、そんなことはなく同じ名前のままで何度でも繰り返し問題なく動作しました。

お礼日時:2016/02/07 23:00

詳細は、分かりませんが移動させたいなら


切り取りって貼り付けないで下記の様に
対象のオートシェイプの位置をそもそも変える事で
要件はみたしませんかね?

Sub test()

With ActiveSheet.Shapes("角丸四角形 10")

.Top = Range("a1").Top
.Left = Range("a1").Left
End With

End Sub

あとは、選んだセル位置に移動させたいなら
セル位置を取得してから、その位置に来るように
コード書き換えればいいと思います。
また、特定のセルと分かっているのなら直接書き込んだり
微調整したいなら、「Range("a1").Top- 任意の数値」のように
すれば上下左右ともに調整できます。
    • good
    • 0
この回答へのお礼

試してみました。
いいですね。図形などの移動は、切り取らなくても位置の指定で移動できるのですね。
問題なく思い通りになりました。
どうもありがとうございました。

お礼日時:2016/02/07 22:57

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング