Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3526 / 13645 ツリー ←次へ | 前へ→

【61622】図形の削除が出来ない たかお 09/5/22(金) 11:26 質問[未読]
【61629】Re:図形の削除が出来ない yoshi 09/5/22(金) 12:49 回答[未読]
【61633】Re:図形の削除が出来ない たかお 09/5/22(金) 15:05 質問[未読]
【61635】Re:図形の削除が出来ない もも 09/5/22(金) 17:57 発言[未読]
【61639】Re:図形の削除が出来ない たかお 09/5/22(金) 19:30 質問[未読]
【61638】Re:図形の削除が出来ない ichinose 09/5/22(金) 19:18 発言[未読]
【61640】Re:図形の削除が出来ない ichinose 09/5/22(金) 19:38 発言[未読]
【61641】Re:図形の削除が出来ない たかお 09/5/22(金) 19:42 お礼[未読]
【61644】Re:図形の削除が出来ない ichinose 09/5/22(金) 20:16 発言[未読]
【61643】Re:図形の削除が出来ない yoshi 09/5/22(金) 20:07 回答[未読]

【61622】図形の削除が出来ない
質問  たかお  - 09/5/22(金) 11:26 -

引用なし
パスワード
   複数のシートに図形(オートシェイブの基本図形)を作成しています。
処理開始時に、全シートの図形を削除しようと下記プログラムを実行しました。

  For Each B In ThisWorkbook.Worksheets
    For Each C In B.Shapes
      If C.Locked = False Then
        C.Select: Selection.Delete
      End If
    Next C
  Next B

結果は、Activeになっているシートの図形は削除されましたが
その他のシートは削除されません。
各シートをActiveにせずに図形を削除することは出来ませんか?

【61629】Re:図形の削除が出来ない
回答  yoshi  - 09/5/22(金) 12:49 -

引用なし
パスワード
   >各シートをActiveにせずに図形を削除することは出来ませんか?

次のかんじでは...
 Dim ws As Worksheet, sp As Shape
 For Each ws In ThisWorkbook.Worksheets
  For Each sp In ws.Shapes
   If sp.Locked = False Then sp.Delete
  Next
 Next

【61633】Re:図形の削除が出来ない
質問  たかお  - 09/5/22(金) 15:05 -

引用なし
パスワード
   ▼yoshi さん:ご回答、ありがとうございます。

> Dim ws As Worksheet, sp As Shape
> For Each ws In ThisWorkbook.Worksheets
>  For Each sp In ws.Shapes
>   If sp.Locked = False Then sp.Delete
>  Next
> Next

上記を試して見ましたが、sp.Deleteで 実行時エラー'1004'が
発生して図形の削除は出来ませんでした。
なにか実行時に条件があるのでしょうか?

【61635】Re:図形の削除が出来ない
発言  もも  - 09/5/22(金) 17:57 -

引用なし
パスワード
   ▼たかお さん:
>上記を試して見ましたが、sp.Deleteで 実行時エラー'1004'が
>発生して図形の削除は出来ませんでした。
>なにか実行時に条件があるのでしょうか?

思うに、シートに保護が掛かっていたりしませんか?

【61638】Re:図形の削除が出来ない
発言  ichinose  - 09/5/22(金) 19:18 -

引用なし
パスワード
   こんばんは。

Sub test2()
 Dim ws As Worksheet, sp As Object
 On Error Resume Next
 For Each ws In ThisWorkbook.Worksheets
  For Each sp In ws.DrawingObjects
   If sp.Locked = False Then
     MsgBox sp.Name
     sp.Delete
   End If
  Next
 Next
 On Error GoTo 0
End Sub


これで試してみてください。
VBA質問箱久しぶりだア

【61639】Re:図形の削除が出来ない
質問  たかお  - 09/5/22(金) 19:30 -

引用なし
パスワード
   ▼もも さん:
>
>思うに、シートに保護が掛かっていたりしませんか?

Activeシートの保護を外すと上手くいきました。・・・が、
下記の様な現象があり、理解できません。
Sheet1の保護のみ外し、Sheet2・Sheet3は保護を掛たままで実行すると
Sheet1・Sheet2・Sheet3の(Locked=Falseの)図形は全て削除されました。
しかしSheet1の図形が削除されたのは理解できますが、保護を掛たままの
Sheet2・Sheet3の図形が削除されるのは何故でしょうか?
保護が掛かっているのでエラーになると思うのですが。

【61640】Re:図形の削除が出来ない
発言  ichinose  - 09/5/22(金) 19:38 -

引用なし
パスワード
   >Sub test2()
> Dim ws As Worksheet, sp As Object
> On Error Resume Next
> For Each ws In ThisWorkbook.Worksheets
>  For Each sp In ws.DrawingObjects
>   If sp.Locked = False Then
'     MsgBox sp.Name あっ、これはずして
>     sp.Delete
>   End If
>  Next
> Next
> On Error GoTo 0
>End Sub
>

【61641】Re:図形の削除が出来ない
お礼  たかお  - 09/5/22(金) 19:42 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます。
上手く行きました。
ShapesとDrawingObjectsの違いが良く判りませんが、
勉強します。

【61643】Re:図形の削除が出来ない
回答  yoshi  - 09/5/22(金) 20:07 -

引用なし
パスワード
   >上記を試して見ましたが、sp.Deleteで 実行時エラー'1004'が
>発生して図形の削除は出来ませんでした。

あ、正しくは以下でした。
 If sp.Locked = False Then sp.Delete
 ↓
 If sp.Locked = False Then sp.DrawingObject.Delete

こちらを参考にしたのですが結構お勧めです。
E97M043 記録したマクロの修正ヒント
例10: 図形描画の例(4)
ht tp://homepage2.nifty.com/kmado/kvba.htm

【61644】Re:図形の削除が出来ない
発言  ichinose  - 09/5/22(金) 20:16 -

引用なし
パスワード
   >ShapesとDrawingObjectsの違いが良く判りませんが、
まっ、違いは見えている図形を操作する方法(メソッド)や性質の設定(プロパティ)方法に違いがあるということでしょうね!!

Shapesのほうが新しいんですけど、色々問題があるので要注意ですよ!!
今回の現象だって、たぶんバグだよ!!

もっともDrawingObjectだって、油断なりませんけど・・・。

3526 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free