標題:
[發問]
刪除部分工作表
[打印本頁]
作者:
asch2007
時間:
2014-10-9 16:07
標題:
刪除部分工作表
我把要刪除的工作表名稱都放在A欄
但不知那裏有錯,懇請各位高手賜教
感激不盡
For Each sht In Worksheets
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
If sht.name = Cells(i, 1) Then
sht.Delete
End If
Application.DisplayAlerts = False
Next
Next
End Sub
複製代碼
作者:
蝕光迴狼
時間:
2014-10-9 17:59
回復
1#
asch2007
麻煩請詳述,程式執行後,你想要呈現的結果。
不然想幫忙的人,寫出來的程式碼,可能會跟你要的結果,有很大落差
作者:
GBKEE
時間:
2014-10-9 20:04
回復
1#
asch2007
試試看
Option Explicit
Sub Ex()
Dim sht As Worksheet, i As Integer
Application.DisplayAlerts = False
With ActiveWorkbook
For Each sht In .Worksheets
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
If sht.Name = Cells(i, 1) And .Sheets.Count > 1 Then
'.Sheets.Count > 1 '活頁簿必須有一張的工作表存在.
sht.Delete
End If
Next
Next
End With
End Sub
複製代碼
作者:
asch2007
時間:
2014-10-13 11:16
回復
2#
蝕光迴狼
很抱歉沒說清楚
我想要刪除多餘的工作表,但不是全刪
要刪除工作表的名稱,放在另一個工作表中
我嚐試寫了一段程式,執行中間有出錯
錯誤訊息:
執行階段錯誤'424':
此處需要物件
偵錯結果停在
If sht.name = Cells(i, 1) Then
但我不知錯那裏
希望各位大大指點迷津
感激不盡
作者:
luhpro
時間:
2014-10-13 21:30
本帖最後由 luhpro 於 2014-10-13 21:32 編輯
回復
4#
asch2007
那是因為 在
sht.Delete
這一行時 sht 物件被刪掉了.
但是 For Next 迴圈還是繼續在執行,
於是跑到
If sht.Name ...
這一行時 Sht 物件已經不存在所以 "找不到物件".
底下兩種方式都可以不再出現此錯誤訊息.
Application.DisplayAlerts = False
For Each sht In Worksheets
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Not IsEmpty(sht) Then
If sht.Name = Cells(i, 1) Then sht.Delete
End If
Next
Next
Application.DisplayAlerts = True
複製代碼
Application.DisplayAlerts = False
For Each sht In Worksheets
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
If sht.Name = Cells(i, 1) Then
sht.Delete
Exit For
End If
Next
Next
Application.DisplayAlerts = True
複製代碼
作者:
Hsieh
時間:
2014-10-14 09:23
回復
4#
asch2007
Sub ex()
Dim Sh As Worksheet
Set d = CreateObject("Scripting.Dictionary")
For Each Sh In Sheets
Set d(Sh.Name) = Sh '暫存所有工作表
Next
With Sheets("工作表1") '欲刪除名單工作表
For Each a In .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
If d.exists(CStr(a)) = True Then d(CStr(a)).Delete '為防止以數字為名的工作表,故使用Cstr轉成字串
Next
End With
End Sub
複製代碼
作者:
asch2007
時間:
2014-10-16 15:37
回復
5#
luhpro
感謝幫忙,測試結果第一個還是不行,但第二個成功!!
作者:
asch2007
時間:
2014-10-16 15:38
回復
6#
Hsieh
測試結果還是有問題,我再研究看看
感謝
作者:
asch2007
時間:
2014-10-16 15:49
[attach]19351[/attach]
經測試結果只有"刪表二"成功
其他我再研究看看
作者:
GBKEE
時間:
2014-10-16 19:47
回復
9#
asch2007
Sub 刪表()
Dim i As Integer, sht As Worksheet
Worksheets("刪表名單").Activate
Application.DisplayAlerts = False
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
For Each sht In Worksheets
If sht.name = Cells(i, 1) Then sht.Delete
Next
Next
Application.DisplayAlerts = True
End Sub
Sub 刪表2()
Dim i As Integer, sht As Worksheet
Worksheets("刪表名單").Activate
Application.DisplayAlerts = False
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
For Each sht In Worksheets
If sht.name = Cells(i, 1) Then
sht.Delete
Exit For
End If
Next
Next
Application.DisplayAlerts = True
End Sub
Sub 刪表3()
Dim Sh As Worksheet, d As Object, a As Range
Set d = CreateObject("Scripting.Dictionary")
For Each Sh In Sheets
Set d(Sh.name) = Sh '暫存所有工作表
Next
Application.DisplayAlerts = False
With Sheets("刪表名單") '欲刪除名單工作表
For Each a In .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
If d.exists(CStr(a)) = True Then d(CStr(a)).Delete '為防止以數字為名的工作表,故使用Cstr轉成字串
Next
End With
Application.DisplayAlerts = True
End Sub
Sub 刪表_EX()
Dim i As Integer
Application.DisplayAlerts = False
With Worksheets("刪表名單")
On Error Resume Next
For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
.Parent.Sheets(.Cells(i, 1).Value).Delete
Next
On Error GoTo 0
End With
Application.DisplayAlerts = True
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)