Board logo

標題: [發問] (發問)★連刪n個工作表範例問題 [打印本頁]

作者: yagami12th    時間: 2012-1-4 19:12     標題: (發問)★連刪n個工作表範例問題

剛學vba,資歷尚淺,問一些蠢問題還請見諒,不過持續有在精進。問題如下:

現在要刪工作表從第2個刪到第12個,我寫的程式不知道錯在哪裡,煩請大家指正。

Sub 巨集1()
' 巨集1 巨集
Dim i As Long
For i = 2To 12
    Sheets("工作表i").Select   <<<這行顯示出錯誤
    ActiveWindow.SelectedSheets.Delete
Next i
End Sub
---------------------------------------------------------------------------------------------------------
解決方案:(原始搞笑的版本)
'
    Sheets("工作表4").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets("工作表5").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets("工作表6").Select
    ActiveWindow.SelectedSheets.Delete
..
..
    Sheets("工作表12").Select   '就同樣的程式碼一直複製貼上,改工作表後面的數字
    ActiveWindow.SelectedSheets.Delete
End Sub
-----------------------------------------------------------------------
今天是運氣好只有12個工作表,哪一天如果100個工作表要刪,這個程式碼就變的非常長了..基於危機意識,特來版上請益。

之前學習是以錄製巨集再去編輯裡頭看程式碼,搭配幾本入學書籍,但處理大量資料之後,很多東西開始不能用錄的回去看,像上一篇"★請教各位 vba整理數據問題,根據條件,開特定新檔,貼檔,儲存,再條件判斷的問題"就沒有辨法用錄製的方式來反查,還好GBKEE大幫忙,問題才得以解決,才發覺自已的程式學習之路還有很遠的路要走。

因為在書局看了不少仿間日本人寫的書應用都寫的不錯,但比較少針對迴圈或大量資料做處理的範例來做各個解析。差不多一個章節,有大大能現身說法,學習的過程嗎?再來應該是要把迴圈包迴圈等技巧學的很熟練。
作者: kobo    時間: 2012-1-4 19:43

本帖最後由 kobo 於 2012-1-4 19:55 編輯

試試看這個
Sub 巨集1()
Dim i As Integer
For i = 12 To 2 Step -1
    Application.DisplayAlerts = False
    Sheets(i).Delete
    Application.DisplayAlerts = True
Next i
End Sub

Sub 巨集2()
Dim i As Integer
For i = 1 To 11
    Application.DisplayAlerts = False
    Sheets(2).Delete
    Application.DisplayAlerts = True
Next i
End Sub

Sub 巨集3()
Dim i As Integer
For i = 1 To 11
    a = Sheets.Count
    Application.DisplayAlerts = False
    Sheets(a).Delete
    Application.DisplayAlerts = True
Next i
End Sub
作者: yagami12th    時間: 2012-1-4 19:54

感謝kobo大,程式碼可以執行,我加了註解,讓後面學習的人能夠了解。

Sub 巨集1()
Dim i As Integer
For i = 12 To 2 Step -1 '從12減到2,每次間隔1
     Application.DisplayAlerts = False  '停止系統提示<這兩招昨天GBKEE大教我的
     Sheets(i).Delete '從工作表12開始刪到工作表2
     Application.DisplayAlerts = True '恢複系統提示
Next i
End Sub
作者: lcc_seven    時間: 2012-1-4 22:54

回復 3# yagami12th
我也來提供一個,自動判別有幾個sheet,刪除到只剩1個,因為如果連最後一個也刪除,檔案會關閉起來
Sub DeleteSheets()
Dim SheetsCount As Integer
SheetsCount = Application.Sheets.Count
Application.DisplayAlerts = False
If SheetsCount > 1 Then
    For i = 1 To SheetsCount - 1
        Sheets(1).Delete
    Next i
End If
Application.DisplayAlerts = True
End Sub
作者: GBKEE    時間: 2012-1-5 09:59

本帖最後由 GBKEE 於 2012-1-5 11:15 編輯

回復 4# lcc_seven
刪除到只剩1個,因為如果連最後一個也刪除,檔案會關閉起來
請問 一下  2007以上版本允許活頁簿中完全沒有 Sheet (工作表) 嗎?
****************
後續 :
If SheetsCount > 1 Then            
    For i = 1 To SheetsCount - 1
        Sheets(1).Delete      <- 刪除第一個 但如是 Sheets(i).Delete 會有錯誤  可參考3#的 Step-1
    Next i
End If
******************************
作者: yagami12th    時間: 2012-1-5 10:17

回履:GBKEE大,剛剛我有試了,2010版本至少要留一個工作表才行,不能全刪。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)