総ありがとう数 累計4,289万(2014年10月31日現在)

毎月4,000万人が利用!Q&Aでみんなで助け合い!

-PR-
ebis

シート上に複数のグループ化したオートシェイプがあり、
それを一括して消すマクロを組みました。
その時、シート上のボタンまで消してしまわないようTypeで判断しています。
Dim Sp As Shape
For Each Sp In Shapes
If Not Sp.Type = 12 Then
Sp.Delete
End If
Next
簡単な図形であれば、数百個でも問題ありません。
また、複雑な図形でも数個であれば正常に動作します。
これが、複雑な図形が数十個になると、
"Tyepメソッドは失敗しました。"とエラーが表示されExcel自体が強制終了します。
1、2回で出ないこともたまにありますが、何度か繰り返しますと確実に出ます。
原因が特定できず困っています。
推測や可能性でもかまいません、どうぞよろしくお願いいたします。

※複雑な図形とはフリーハンドを組み合わせたような絵です。(人物の顔など)
動作はWindows2000のEXCEL2000で2台
WindowsXPのEXCEL2003で1台でテストしました。
  • 回答数2
  • 気になる数1

Aみんなの回答(全2件)

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

  • 2006-02-13 13:38:35
  • 回答No.2
「Excel自体が強制終了します。」とか、「だいたい3回で落ちてしまいました。」という

ことから、試しに Sp.Delete の下に DoEvents を入れると、どうなりますか?
お礼コメント
すごいです。
もう、何百個書いても、何度繰り返しても問題ありませんでした。
ありがとうございました。
投稿日時 - 2006-02-13 13:50:13
  • 同意数0(0-0)
  • ありがとう数0

その他の回答 (全1件)

  • 2006-02-13 11:40:53
  • 回答No.1
見た感じですが、Shapes って 何処の? となると思いますが・・・

あと、12 だけでは、分りにくいのでは・・・ まぁ、いいけど・・・ 

Dim Sp As Shape
For Each Sp In ActiveSheet.Shapes
  If Not Sp.Type = msoOLEControlObject Then
    Sp.Delete
  End If
Next
補足コメント
すみません。説明不足でした。
Sheet1内に記述していた為、省略しておりました。
修正していただいたマクロに変えてみましたが、
やはり落ちてしまいました。

簡単にテストするため以下のようにしました。
Sheet1にボタンを2つ付けて

Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 10
Worksheets("Sheet2").Shapes("A").Copy
ActiveSheet.Paste
Next i
End Sub

Private Sub CommandButton2_Click()
Dim Sp As Shape
For Each Sp In ActiveSheet.Shapes
If Not Sp.Type = msoOLEControlObject Then
Sp.Delete
End If
Next
End Sub

そしてSheet2には下手なドラえもんの絵をフリーで描いて、グループ化し、"A"と名前を付けました。

これでボタン1を押して書いて、ボタン2を押して消してを繰り返しますと、だいたい3回で落ちてしまいました。
投稿日時 - 2006-02-13 12:27:40
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 回答数2
  • 気になる数1
  • ありがとう数0
  • ありがとう
  • なるほど、役に立ったなど
    感じた思いを「ありがとう」で
    伝えてください

関連するQ&A

その他の関連するQ&Aをキーワードで探す

別のキーワードで再検索する

あなたの悩みをみんなに解決してもらいましょう

  • 質問する
  • 知りたいこと、悩んでいることを
    投稿してみましょう
-PR-
-PR-

特集

専門医・味村先生からのアドバイスは必見です!

関連するQ&A

-PR-

ピックアップ

  • easy daisy部屋探し・家選びのヒントがいっぱい!

-PR-
ページ先頭へ