为什么我的删除程序第二次不起作用?

我写了下面的代码来插入新的图纸,重命名并删除它们。 但是,当我第二次调用删除子时,它将不起作用,因为NumSheets变为零,即使有两个以上的表。

Public NumSheets As Integer Sub NewCCSheet() Dim n As Integer n = InputBox("How many 16-24 Vehicle CCsheets do you need? (Enter a number only)") NewVehicle (n) End Sub Function NewVehicle(n As Integer) For i = 1 To n NumSheets = NumSheets + 1 Worksheets("16-24 Vehicle CC1").Copy Before:=Worksheets("Ave. Vehicle CC") ActiveSheet.Name = "16-24 Vehicle CC" & CStr(NumSheets + 1) Range("B5").ClearContents Range("D4").ClearContents Range("E12:E13").ClearContents Range("B15:E23").ClearContents MsgBox NumSheets Next i End Function Sub DeleteSheets() MsgBox NumSheets Dim Ans As String If NumSheets = 0 Then MsgBox "You can't delete 16-24 Vehicle CC1 Worksheet" Exit Sub End If Ans = MsgBox("Delete current worksheet?", vbYesNo) If Ans = vbYes Then NumSheets = NumSheets - 1 On Error Resume Next Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True MsgBox NumSheets End If End Sub 

在某些情况下,您的代码可能会从NumSheets减去1而不删除工作表 – 例如,如果NumSheets下一个,我不相信会从工作簿中删除最后一个工作表。 On Error Resume Next打开On Error Resume Next可能会导致其他错误导致NumSheets和实际页数之间的不匹配。

你可以使用Sheets().Count而不是NumSheets ? 如果是这样的话,那会给你一个最新的,准确的计数实际数量的纸张在给定的时间,你就不必乱搞追踪自己的数量。 所以你的代码看起来像这样:

 Sub NewCCSheet() Dim n As Integer n = InputBox("How many 16-24 Vehicle CCsheets do you need? (Enter a number only)") NewVehicle (n) End Sub Function NewVehicle(n As Integer) For i = 1 To n Worksheets("16-24 Vehicle CC1").Copy Before:=Worksheets("Ave. Vehicle CC") ActiveSheet.Name = "16-24 Vehicle CC" & CStr(Sheets().Count + 1) Range("B5").ClearContents Range("D4").ClearContents Range("E12:E13").ClearContents Range("B15:E23").ClearContents Next i End Function Sub DeleteSheets() Dim Ans As String If Sheets().Count = 0 Then MsgBox "You can't delete 16-24 Vehicle CC1 Worksheet" Exit Sub End If Ans = MsgBox("Delete current worksheet?", vbYesNo) If Ans = vbYes Then On Error Resume Next Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End If End Sub