Excel 为什么我的删除过程在第二次调用它时不起作用?

Excel 为什么我的删除过程在第二次调用它时不起作用?,excel,vba,Excel,Vba,我编写了以下代码来插入新工作表、重命名和删除它们。 但是,当我第二次调用delete sub时,它将不起作用,因为NumSheets变为零,即使有两张以上的工作表 Public NumSheets As Integer Sub NewCCSheet() Dim n As Integer n = InputBox("How many 16-24 Vehicle C.C.sheets do you need? (Enter a number only)") NewVehi

我编写了以下代码来插入新工作表、重命名和删除它们。 但是,当我第二次调用delete sub时,它将不起作用,因为NumSheets变为零,即使有两张以上的工作表

Public NumSheets As Integer
Sub NewCCSheet()
    Dim n As Integer

    n = InputBox("How many 16-24 Vehicle C.C.sheets 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 C.C.1").Copy Before:=Worksheets("Ave. Vehicle C.C.")
        ActiveSheet.Name = "16-24 Vehicle C.C." & 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 C.C.1 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——例如,如果工作簿中只剩下1张,我不相信它会删除工作簿中的最后一张工作表。“错误恢复下一步”打开了其他错误的可能性,从而导致
NumSheets
与实际张数不匹配

您是否可以使用
Sheets().Count
而不是
NumSheets
?如果是这样的话,这将为您提供一个最新的、准确的统计在给定时间内的实际张数的方法,并且您不必自己去跟踪张数。因此,您的代码可能如下所示:

Sub NewCCSheet()
    Dim n As Integer

    n = InputBox("How many 16-24 Vehicle C.C.sheets 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 C.C.1").Copy Before:=Worksheets("Ave. Vehicle C.C.")
        ActiveSheet.Name = "16-24 Vehicle C.C." & 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 C.C.1 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

有些情况下,您的代码可能会在不删除工作表的情况下从
NumSheets
中减去1——例如,如果工作簿中只剩下1张,我不相信它会删除工作簿中的最后一张工作表。“错误恢复下一步”打开了其他错误的可能性,从而导致
NumSheets
与实际张数不匹配

您是否可以使用
Sheets().Count
而不是
NumSheets
?如果是这样的话,这将为您提供一个最新的、准确的统计在给定时间内的实际张数的方法,并且您不必自己去跟踪张数。因此,您的代码可能如下所示:

Sub NewCCSheet()
    Dim n As Integer

    n = InputBox("How many 16-24 Vehicle C.C.sheets 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 C.C.1").Copy Before:=Worksheets("Ave. Vehicle C.C.")
        ActiveSheet.Name = "16-24 Vehicle C.C." & 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 C.C.1 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

我不知道为什么我的代码在屏幕上以这种方式格式化……很难理解……我不知道为什么我的代码在屏幕上以这种方式格式化……很难理解……我希望有一个特定的变量来跟踪我创建的某些工作表。我可以在下一个声明中删除错误。但是Excel给了我一个自动化错误,我不知道如何修复这个错误。而且,我意识到NumSheets的值在完成模块后变为零。如何在vba中保留变量的值?我希望有一个特定的变量来跟踪我创建的某些图纸。我可以在下一个声明中删除错误。但是Excel给了我一个自动化错误,我不知道如何修复这个错误。而且,我意识到NumSheets的值在完成模块后变为零。如何在vba中保留变量的值??