[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定する形のAutoShapeのみ削除する』(yuri)
sheetの表には多数のAutoShapeが貼ってあって、その形も様々です。 そこで多数の形のshapeの中からしてするshapeのみを一括で削除したいのですがVBAには詳しくなく、検索して見つけたコードを応用して試しましたが上手く行きませんでした。
これが見つけたコードです。
Sub obuject_delete()
Dim i As Long
With Worksheets("Sheet1")
For i = .Shapes.Count To 1 Step -1
If .Shapes(i).Type = msoAutoshape Then .Shapes(i).Delete
Next i
End With
End Sub
これだと、全部消えるので、例えばmsoShapeRoundedRectangleの形のみ削除されるようにしたいのです。
どうか、ご教授ください。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
AutoShapeTypeで判定してはどうでしょうか
(マナ) 2018/10/21(日) 12:07
ご教授有難うございます。
AutoShapeTypeで判定してはどうでしょうか
ですが、判定のコードの組方がよくわかりません。
Sub obuject_delete()
Dim i As Long With Worksheets("Sheet 1") For i = .Shapes.Count To 1 Step -1 If .Shapes(i).Type = AutoShapeType = msoShapeRoundedRectangles Then .Shapes(i).Delete
Next i End With End Sub
上記のようにしたら、全部削除になります。
すみません、もう少し詳しくお願いします。
(yuri) 2018/10/21(日) 15:49
If .Shapes(i).AutoShapeType = 5 Then MsgBox .Shapes(i).Name End If とかで ご確認を
(隠居じーさん) 2018/10/21(日) 16:22
マナさんは、ご提示のコードはTypeプロパティでShapesかどうかを判定しているので、 AutoShapeTypeプロパティで角丸四角形かどうかを判定した方が良いですよと言ってます。
Typeプロパティが何を意味するのか、回答者に元コードの改造を丸投げするだけで無く、 まずはコードの意味を理解する努力もして下さい。
(sy) 2018/10/21(日) 19:03
ShapesのTypeプロパティは、オートシェイプを含む様々な図形オブジェクトの種類を返します。 なのでTypeプロパティでは、対象の図形オブジェクトがオートシェイプか違うかしか分かりません。 以下を参考にして下さい。 https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.office.core.msoshapetype?redirectedfrom=MSDN&view=office-pia
対してAutoShapeTypeプロパティはオートシェイプの種類を返します。 対象の図形がオートシェイプだった場合に、そのオートシェイプの種類を返します。 https://msdn.microsoft.com/ja-jp/VBA/Office-Shared-VBA/articles/msoautoshapetype-enumeration-office 此処とか分かりやすいリストにしてくれてます。 https://www.relief.jp/docs/018476.html
ヒントを元にもう一度ご自身で頑張ってみて下さい。 まぁそれでも分からなければ仕方ないので、分からないと言えば回答を出します。 日中は仕事なので回答できませんが、その時は誰かが回答してくれるでしょう。
(sy) 2018/10/21(日) 19:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.