2016-08-16 63 views
0

我嘗試刪除所有工作表從Sheet5開始到最後一個工作表,但我得到了「運行時錯誤下標超出範圍」。excel vba刪除工作表運行時錯誤下標超出範圍

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,現在和代碼會試圖刪除ThisWorkbook.Sheets(8),然而,此工作表不存在 - >標超出範圍

+0

以復加,VBA會刪除'Sheet'在那個位置,所以如果'Sheets'將被洗牌或命名,它將刪除'Sheet'位於'5'的位置作爲開始。 – DragonSamu

+0

非常感謝@daZza我沒有意識到刪除Sheet5後,Sheet6將變成Sheet5,所以我只需要使用循環方法保留刪除Sheet5。 –

+0

的確,我認爲在那裏很複雜:P – daZza

相關問題