2016-08-16 15 views
0

Sheet5から最後のシートまでのすべてのシートを削除しようとしましたが、ランタイムエラーサブスクリプトが範囲外です。excel vba delete sheetランタイムエラーsubscript out of range

Dim x as Long 
For x = 5 To ThisWorkbook.Worksheets.Count 
Application.DisplayAlerts = False 
ThisWorkbook.Sheets(x).Delete 
Application.DisplayAlerts = True 
Next 

結果は削除されましたが、Sheet5、Sheet7、Sheet9のみでしたが、Sheet6とSheet8はまだそこにありました。グレーのデバッグボタンと私はどこにエラーがあるのだろうか。 これに苦労し続けることができないため、助けてください。 ありがとうございます!

答えて

1

私はシートを削除するというあなたのロジックに問題があると確信しています。 ループの最初にThisWorkbook.Sheets(x).DeleteはSheet5を削除します。

ただし、一旦Sheet5が削除されると、Sheet6が代わりになるので、ThisWorkbook.Sheets(5)はSheet6と等しくなります。

あなたのカウンタはこの時点でx = 6なので、ThisWorkbook.Sheets(6)の位置にあるSheet7は削除されます。

シート8が適用され、この時点でカウンターはx = 7になります。これにより、ThisWorkbook.Sheets(7)の位置にあるSheet9が削除されます。

カウンターは今、X = 8になり、コードは(8)、しかし、このワークシートが存在しないThisWorkbook.Sheetsを削除しようとする - >範囲

+0

のうち添え字が追加されるために、VBAます'Sheet'がその位置にあるかどうかを削除します。したがって、' Sheets'がシャッフルされたり、名前が付けられたりすると、 'Sheet'が' 5'の位置にあるものを始めとして削除します。 – DragonSamu

+0

@daZzaに感謝しています。私はSheet5を削除した後にはわかりませんでした。Sheet5はSheet5になりますので、ループメソッドを使用してSheet5を削除する必要があります。 –

+0

真実、私はそこに複雑に思った:P – daZza

関連する問題