• ベストアンサー

オートシェイブだけ削除したい場合、

シートの上にオートシェイブとOLEオブジェクトの方のコマンドボタンがあり、 オートシェイブだけ削除したい場合、 どのようなvbaコードになるのでしょうか? Sub Sample() ActiveSheet.Shapes.Delete End Sub 上だと 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」 になります。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

こんな感じでどうでしょう? Sub Sample1() Dim SH As Shape     For Each SH In Sheets("シート名").Shapes         If SH.Type <> 12 Then             SH.Delete         End If     Next  End Sub ActiveXコントロールは、Typeの値が「12」ですので、 全ての図形のTypeを確認し、「12」以外なら消してやると言う内容です。 補記) 図形を削除するときは Sub Sample() ActiveSheet.Shapes(1).Delete End Sub のように、図形の連番を指定してやるのが一般的です。 表示されているシートの全ての図形を削除するなら Sub sample2()     ActiveSheet.Shapes.SelectAll     Selection.Delete End Sub こんな感じです。

xhermfodhb
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA オートシェイブや図を選択したいのですが

    VBAでシート上にある全てのオートシェイブや図を選択したいのですが どのようにすればいいでしょうか? 手作業でなら、CTRL+Gでオブジェクトを選択すればできますがVBAで行いたいです。 Sub test() Dim s As Shape For Each s In ActiveSheet.Shapes s.Select Next End Sub をしても、一つずつしか選択できません。 全てを選択状態にしたいです。

  • Excel マクロ オートシェイブのコピーについて

    列を自動的に表示したり、非表示にするマクロを組みました。 例えばA列にあるオートシェイブXを置いて、それに以下のマクロを登録します。 Sub 表示1() Dim col As Integer col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column Columns(col + 1).Hidden = False End Sub 次に、B列に別のオートシェイブYを置いて以下のマクロを登録します。 Sub 非表示() Dim col As Integer col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column Columns(col).Hidden = True End Sub これで、YをクリックするとB列が非表示になり、XをクリックするとB列を表示にすることができました。 ところが、このオートシェイブX、Yを別の列にコピーして使おうとすると、うまくいくときといかないときがあります。 例えば、オートシェイブXをG列にコピーしたとき、 ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column の値が、7になるときと、1のままのときがあります。 オートシェイブのコピーにおいて、そのままコピーされるとき(7になるとき)と、ちょうどショートカットのようなものになるとき(1になるとき)があるようです。 両者の違い(どのようなときに違いが出るのか)についてどなたか、お教えください。

  • オートシェイブをIncrementLeftプロパテ

    オートシェイブをIncrementLeftプロパティで今ある位置から指定したポイントだけ左にするのではなく、 一番左から指定したポイント分の位置を指定するプロパティを教えてください。 今は、 Sub test() ActiveSheet.Shapes.Range(Array("タイトル")).Select Selection.ShapeRange.IncrementLeft -10000 Selection.ShapeRange.IncrementLeft 40 End Sub にしてるのですが、2度手間なので、 -10000せずに、40と設定したら、 左から40の位置を指定できるプロパティを教えてください。

  • excel オートシェイブのコピーについて

    ワークシート内にオートシェイブを使って、マクロのボタンを作りました。 同じボタンを複数個使うのでコピーしてマクロ登録しようとしたところ、 1)同じオートシェーブNoになる場合(AutoShape1_Click) と 2)違うオートシェイブNoになる場合(AutoShape1_ClickとAutoShape2_Click) がありました。 登録したマクロが、オートシェイブオブジェクトの置かれているセル行を使用しているため col = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 1)の場合は最初に置いたAutoShape1のセル行が返されてきます。 質問ですが、  イ) コピーをして、1)になる場合と、2)になる場合はどこが違うんでしょうか?  ロ) オートシェイブのプロパティを見る方法ってありますか?    コピーしたオートシェイブNoを確認したいのですが…

  • エクセルVBAの構文についての質問です

    ちょっと前から勉強しはじめた超超初心者なんですが、オブジェクトやプロパティといった概念がちょっと理解できないでくるしんでいます 1、 Sub 図形非表示() ActiveSheet.Shapes("図形").Visible=False End Sub これは本にのっていた例文でアクテブシートの「図形」という名前のオートシェイプを非表示にする文なのですが本には「Visible プロパティ」 「Shapes プロパティ オートシェイプを返します」とありますがこれはつまり「Shapesプロパティ自体がオブジェクトになっている」ということなのでしょうか?「Shapes プロパティ」とかいてあるのでただのプロパティなのではないか???とおもってしまうのですが・・・ 2、 1と同じ感じなのですが Sub ワークシートに色を設定()   Worksheets("メニュー").Cells.Interior.ColorIndex=11 End Sub もInteriorプロパティ自体がオブジェクトになっているのでしょうか?? だとしたら全てのプロパティもオブジェクトになれるのでしょうか? 是非どなたか教えてください、よろしくお願いします

  • オートフィルタがかかっていて、なおかつ抽出中なら

    オートフィルタがかかっていて、なおかつ抽出中なら、 という状態をvbaで取得する方法はありますか? Sub Sample() If ActiveSheet.AutoFilterMode = True Then End If End Sub これだと、 オートフィルタがかかっているだけでも、反応してしまいます。 「行番号が青色になってるのなら」 と同じ状態にしたいのですが、 どういうコードになりますか?

  • コマンドボタンを削除しないか自動生成する

    エクセルのマクロで、不要な表やオブジェクトを一括で削除するためのマクロを作成し、コマンドボタンをシートに作成してマクロを登録しています。 コマンドを実行すると、不要な表やオブジェクトと一緒に、マクロを実行するためのコマンドボタンも削除されてしまいます。 そのため、コマンドボタンを削除されないためにはどうしたらいいでしょうか。 あるいは、コマンドボタンを自動で生成し、マクロを登録するにはどうしたらいいでしょうか。 参考までに、オブジェクトを削除するマクロは次の通りです。 Sub 削除() Cells.Delete Dim shp As Shape For Each shp In ActiveSheet.Shapes shp.Delete Next shp End Sub よろしくお願い致します。

  • エクセルVBAでオートシェープを識別して削除したいのです・・・

    エクセルシートにたくさん貼り付けた画像を一度に削除するため、下記のようなマクロを作成しました。 しかし、これでは「テキストボックス」や「→」のようなオートシェープも全部消えてしまいます。 画像データ(図)だけを認識して消すにはどうすればよいのでしょうか? Sub sakujo() Dim Myshape As Shape For Each Myshape In ActiveSheet.Shapes If Myshape.Type <> msoFormControl Then Myshape.Delete End If Next End Sub

  • シート上のjpg画像のみを一括削除したい

    Excel VBA勉強中の者です。 早速ですが、シート上にあるjpg画像のみを一括削除したく ネットで調べつつ以下のコードを作ってみました Sub dlt() '既存の画像を削除 Dim jpgdlt As Shape With ActiveSheet .DrawingObjects.Delete 'このコードが違っている??? For Each jpgdlt In .Shapes ’For Each Next で選択対象を繰り返し削除 jpgdlt.Delete Next End With End Sub これでjpg画像の削除は出来たのですが、シート上に配置した コントロールなどのオブジェクトも全て削除されてしまい困っております。 以下のコードも作ってみたのですが、こちらはメモリーが不足しているという エラーを回避できず、オブジェクトが削除されるか検証する前に使用を断念しました。 Sub dlt() '既存の画像を削除 Dim jpgdlt As Object Set jpgdlt = ActiveSheet jpgdlt.Shapes.SelectAll Selection.Delete End Sub jpg画像のみを選択し、削除するにはどうすれば宜しいのでしょうか? 色々調べてはみたものの、自力での解決に至らず、 お手数お掛けしますがどなたかご助力お願い致します。

  • VBA 図形の削除

    以下のようなコードにおいて、図名を指定するのではなく、図の種類を指定して削除したいのです。 テキストボックスを消す グラフを消す オートシェイプを消す などなど、オブジェクトの種類を指定して消すようにしたいのですが、どうすれば良いですか? Sub 指定図形削除()  図名=”削除したい図形名”  For Each zu In ActiveSheet.Shapes   If zu.Name = 図名 Then    zu.Delete    Exit For   End If  Next End Sub

専門家に質問してみよう