-PR-

解決済みの質問

質問No.1962654
困ってます
困ってます
お気に入り投稿に追加する (1人が追加しました)
回答数2
閲覧数996
エクセルVBAでオートシェイプのType取得でエラー
シート上に複数のグループ化したオートシェイプがあり、
それを一括して消すマクロを組みました。
その時、シート上のボタンまで消してしまわないよう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台でテストしました。
投稿日時 - 2006-02-13 10:44:52

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

回答No.2
「Excel自体が強制終了します。」とか、「だいたい3回で落ちてしまいました。」という

ことから、試しに Sp.Delete の下に DoEvents を入れると、どうなりますか?
投稿日時 - 2006-02-13 13:38:35
この回答を支持する
(現在0人が支持しています)
お礼
すごいです。
もう、何百個書いても、何度繰り返しても問題ありませんでした。
ありがとうございました。
投稿日時 - 2006-02-13 13:50:13

ベストアンサー以外の回答 (1)

回答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
投稿日時 - 2006-02-13 11:40:53
この回答を支持する
(現在0人が支持しています)
補足
すみません。説明不足でした。
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人が「このQ&Aが役に立った」と投票しています
もっと聞いてみる

関連するQ&A

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

回答募集中

同じカテゴリの人気Q&Aランキング

-PR-

特集

背筋がゾクゾクする心霊体験を要チェック!

お城、ボート、ツリーハウス、ユニークな物件満載!

【期間限定】1ヶ月無料キャンペーン中!

このQ&Aの関連キーワード

同じカテゴリの人気Q&Aランキング

-PR-

ピックアップ

-PR-