Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 : Excel 2013)
For Each で、指定シート以外の削除実行しても1枚のみしか削除されない
投稿日時: 17/11/22 17:29:48
投稿者: tarima

 
シート名がAAA、BBB以外のシートをすべて削除したいのですが、
ws.Deleteを1回実行して処理が終了してしまいます。
For Eachを抜けてしまうのではなく、1回Delete実行するとそこで終わりです。
最後のMsgBoxは通りません。
Errorにもならず、ただそこで終わってしまうので、実行の度にシートが1枚のみ削除されます。
シート名がAAA、BBB以外のシートは、数十枚あります。
なぜでしょうか。今までこのようなことはなかったように思うので、不思議です。
どなたか原因を教えて頂けないでしょうか。
 
Dim ws As Worksheet
 
For Each ws In Sheets
    Select Case ws.Name
    Case "AAA", "BBB"
    Case Else
      'シート削除
      Application.DisplayAlerts = False
      ws.Delete
      Application.DisplayAlerts = True
    End Select
Next ws
     
MsgBox "Sheets.count:" & Sheets.Count

回答
投稿日時: 17/11/22 17:49:36
投稿者: こまじろう

For Each Sh In Sheets
If Not (Sh.Name = "AAA" Or Sh.Name = "BBB" ) Then
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
End If
Next
ご参考に

回答
投稿日時: 17/11/22 17:54:24
投稿者: もこな2

当方の環境(Win7、Excel2013)で提示のコードをそのまま実行してみましたが、ちゃんと動きますね・・・
 
とりえず、ステップイン実行してみて、どこでループから抜けているか調べてみてはどうでしょうか。
(解決に至らなくてごめんなさい。)

投稿日時: 17/11/22 18:04:25
投稿者: tarima

条件の書き方をSelect CaseからIfに変えても結果はかわりません。
やはり1回のみDelete実行して終了です。
削除対象のシートまでは、Loopは実行されていますし、条件判断も問題ないです。
 

こまじろう さんの引用:
For Each Sh In Sheets
If Not (Sh.Name = "AAA" Or Sh.Name = "BBB" ) Then
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
End If
Next
ご参考に

投稿日時: 17/11/22 18:07:30
投稿者: tarima

ステップイン実行でも、初回のDelete文で終了です。エラーにはなりません。
Loopから抜けるのではなく、処理自体がそこで正常終了ですので、Loop処理以降は
通りません。
削除対象のシートまでは、Loopは実行されていますし、条件判断も問題ないです。
 

もこな2 さんの引用:
当方の環境(Win7、Excel2013)で提示のコードをそのまま実行してみましたが、ちゃんと動きますね・・・
 
とりえず、ステップイン実行してみて、どこでループから抜けているか調べてみてはどうでしょうか。
(解決に至らなくてごめんなさい。)

回答
投稿日時: 17/11/22 18:08:52
投稿者: baoo

私の環境でも動きますね。
コードを見てもMessageBoxの行が実行されない理由が分からない。
 
終わってしまうというのはどういうことでしょう?
中断されているということはないですか?
エラーもなく途中で中断されて黄色の行が表示されるというのは
結構見たことがあります。
この場合はWindowsを再起動すると治るんですが、Excelの再起動では
また同じ現象が発生した気がします。

投稿日時: 17/11/22 18:24:08
投稿者: tarima

ありがとうございます。
Excelの再起動では同じ現象発生でしたが、
Windowsの再起動できちんと実行されました。
コードは何も変えずに、ただWindowsの再起動でOKになりました。
こんなことがあるんですね。思いつきませんでした。
大変助かりました。
 
再起動前の不具合時は、黄色表示で中断ではなく、
エラー処理にもいかず、ただDelete文を1回実行し通常終了していました。
 
 

baoo さんの引用:
私の環境でも動きますね。
コードを見てもMessageBoxの行が実行されない理由が分からない。
 
終わってしまうというのはどういうことでしょう?
中断されているということはないですか?
エラーもなく途中で中断されて黄色の行が表示されるというのは
結構見たことがあります。
この場合はWindowsを再起動すると治るんですが、Excelの再起動では
また同じ現象が発生した気がします。