2015-07-17 38 views
6

Tôi có một macro tạo một số sổ làm việc. Tôi muốn các macro, khi bắt đầu chạy, để kiểm tra xem tệp có chứa 2 bảng tính hay không và xóa chúng nếu chúng tồn tại.Xóa trang tính trong Excel bằng VBA

Mã tôi đã cố gắng là:

If Sheet.Name = "ID Sheet" Then 
    Application.DisplayAlerts = False 
    Sheet.Delete 
    Application.DisplayAlerts = True 

End If 

If Sheet.Name = "Summary" Then 
    Application.DisplayAlerts = False 
    Sheet.Delete 
    Application.DisplayAlerts = True 
End If 

Mã này được trả lại một lỗi:

run time error #424, object required.

tôi có lẽ có định dạng sai, nhưng nếu có một cách dễ dàng hơn để làm điều này, nó sẽ rất hữu ích.

+2

Bạn cần phải lặp và sau đó gọi 'Sheet (i) .Name' – moffeltje

Trả lời

16

xem xét:

Sub SheetKiller() 
    Dim s As Worksheet, t As String 
    Dim i As Long, K As Long 
    K = Sheets.Count 

    For i = K To 1 Step -1 
     t = Sheets(i).Name 
     If t = "ID Sheet" Or t = "Summary" Then 
      Application.DisplayAlerts = False 
       Sheets(i).Delete 
      Application.DisplayAlerts = True 
     End If 
    Next i 
End Sub 

LƯU Ý:

Bec sử dụng chúng tôi là xóa, chúng tôi chạy vòng lặp về phía sau.

-2

thử này trong vòng nếu phát biểu của bạn:

Application.DisplayAlerts = False 
Worksheets(“Sheetname”).Delete 
Application.DisplayAlerts = True 
+0

này sẽ ném một "subscript ra khỏi phạm vi" lỗi nếu SHEETNAME không tồn tại. – Eddy

+0

Tất nhiên nó sẽ, nhưng "Sheetname" phải được thay đổi thành tên thực tế của tờ bạn muốn xóa. Vì vậy, nếu bạn muốn xóa Sheet1 Sheetname sẽ trở thành "Sheet1" – Luuklag

+0

OP đã tuyên bố cụ thể ông muốn kiểm tra xem các tờ tồn tại, do đó, giả định của bạn rằng các tờ sẽ luôn luôn tồn tại là không hợp lệ. Chỉnh sửa của bạn "cho những người không hiểu mã hóa" là không thích hợp. – Eddy

5

Hãy thử mã này:

For Each aSheet In Worksheets 

    Select Case aSheet.Name 

     Case "ID Sheet", "Summary" 
      Application.DisplayAlerts = False 
      aSheet.Delete 
      Application.DisplayAlerts = True 

    End Select 

Next aSheet 
1

Bạn có thể sử dụng On Error Resume Next thì không cần lặp qua tất cả các trang tính trong sổ làm việc.

Lưu ý: Khi sổ làm việc chỉ chứa hai trang tính đó, thì chỉ có trang tính đầu tiên sẽ bị xóa.

Dim book 
Dim sht as Worksheet 

set book= Workbooks("SomeBook.xlsx") 

On Error Resume Next 

Application.DisplayAlerts=False 

Set sht = book.Worksheets("ID Sheet") 
sht.Delete 

Set sht = book.Worksheets("Summary") 
sht.Delete 

Application.DisplayAlerts=True 

On Error GoTo 0 
-1
Worksheets("Sheet1").Delete 
Worksheets("Sheet2").Delete 
Các vấn đề liên quan