2017-12-05 17 views
2

私は各シートに複数のシートを持っています。私はシート番号4から無制限にシートを削除したいと思います。問題は、すべての時間は、コードは、シートを削除するには、私の許可を求める複数のシートを一度に削除

Sub Delete_Sheets() 
    Application.ScreenUpdating = False 
    Dim j As Integer 
    j = Worksheets.Count 
    For k = 4 To j 
     With Sheets(k).Delete 
     End With 
    Next k 
    Application.ScreenUpdating = True 
End Sub 

、最終的にはわずか数枚を削除しました:私は、コードの下にしようとしています。誰かが助けます。

答えて

3

3つのワークシートが残るまで、確認をオフにして、ワークシートの削除コマンドをループします。あなたは次のようにFor k = j To 4 step - 1 ...の場合の増分を逆にした場合

Option Explicit 

Sub qwea() 
    Application.DisplayAlerts = False 
    Do While Worksheets.Count > 3 
     Worksheets(Worksheets.Count).Delete 
    Loop 
    Application.DisplayAlerts = True 
End Sub 

あなたのコードが正しく動作していました。あなたは削除中にワークシートを「歩いている」。

4

表示されているアラートをオフにします。最後のシートから逆方向に削除します。

Sub Delete_Sheets() 
Dim j as long 
Dim k As Long 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    j = Worksheets.Count 
    For k = j To 4 Step -1 
     Sheets(k).Delete 
    Next k 
    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
End Sub 
+0

良いキャッチ! (btw、あなたの* j *は変種として宣言され、長いものではありません) – Jeeped

+0

さて、そこに行ってください。私は新しいことを学びました。ありがとう。 – Carol

+0

ありがとうJeeped、ありがとうキャロル よろしく。 –

0

インデックスが付けられた4枚以上のシートを削除すると、いつでもうまくいくでしょう。

Dim idx, s As String 

Application.DisplayAlerts = False '/* of course you need to turn this off */ 

If Sheets.Count > 3 Then 
    s = "=TRANSPOSE(ROW(A4:A" & Sheets.Count & "))" 
    idx = Evaluate(s) 
    Sheets(idx).Delete 
End If 

Application.DisplayAlerts = True 

これは、常に4
を超えるシートを削除しかし、あなたのシートが常に正しくインデックス付けされていることを確認し、そうでない場合はループを使用します。

関連する問題