为什么删除工作表导致我的代码停止

问题描述 投票:2回答:4

我在这里有一些代码(下面)我需要清除工作表“数据输入”中的数据,可能还有其他更快的方法,但是我选择了删除和重制。请随时说出来。

Private Sub CommandButton1_Click()

Dim DataEntryWs As Worksheet

For i = Worksheets.Count To 1 Step -1

If Worksheets(i).Name = "Data Entry" Then

    Application.DisplayAlerts = False
    Worksheets("Data Entry").Delete
    MsgBox ("Sheet Deleted")
    Set DataEntryWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    DataEntryWs.Name = "Data Entry"
    Call Data_Entry_Calcs

Else

    If i = Worksheets.Count Then

        MsgBox ("Adding new sheets now")
        Set DataEntryWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        DataEntryWs.Name = "Data Entry"
        Call Data_Entry_Calcs

    Else

    End If

End If

Next i

Call Data_Entry_Calcs

End Sub

每当我运行代码时,如果名为“数据条目”的工作表存在,那么当代码到达此行时Worksheets("Data Entry").Delete代码中断并且不会继续。为什么会这样?现在一直在讨厌我。

我试过向后和向后运行For循环,看看这是否有任何不同,但没有成功。

excel vba excel-vba
4个回答
2
投票

如何清除该工作表的内容而不是删除它,例如:

Private Sub CommandButton1_Click()

Dim DataEntryWs As Worksheet

For i = Worksheets.Count To 1 Step -1
    If Worksheets(i).Name = "Data Entry" Then
        Application.DisplayAlerts = False
        Worksheets("Data Entry").Rows("2:" & Rows.Count).ClearContents 'clear the contents from Row 2 to last
        Call Data_Entry_Calcs
    Else
        If i = Worksheets.Count Then
            MsgBox ("Adding new sheets now")
            Set DataEntryWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            DataEntryWs.Name = "Data Entry"
            Call Data_Entry_Calcs
        End If
    End If
Next i

Call Data_Entry_Calcs

End Sub

2
投票

你可以尝试这个吗?如果我理解您正在尝试正确执行的操作,则不需要循环来执行此操作

Private Sub CommandButton1_Click()
    Dim DataEntryWs As Worksheet

    ' Set Sheet want to test to variable
    ' We use error handling in case it doesn't exist. If it doesn't exists DataEntryWs = nothing
    On Error Resume Next
    Set DataEntryWs = ThisWorkbook.Worksheets("Data Entry")
    On Error GoTo 0

    ' Test if sheet exists. If does Delete
    If Not DataEntryWs Is Nothing Then
        Application.DisplayAlerts = False
        DataEntryWs.Delete
        Application.DisplayAlerts = True
        MsgBox "Sheet Deleted"
    End If

    ' Add new sheet
    MsgBox "Adding new sheets now"
    With ThisWorkbook
        Set DataEntryWs = .Sheets.Add(after:=.Sheets(.Sheets.Count))
    End With
    DataEntryWs.Name = "Data Entry"

    Call Data_Entry_Calcs
End Sub

1
投票

你能试试这段代码,让我知道会发生什么,是的,当我运行它时,我确实得到了消息框...

        Sub Test2()
        Dim i As Integer

            On Error GoTo err_handler

            For i = Worksheets.Count To 1 Step -1

                If Worksheets(i).Name = "Data Entry" Then

                    Application.DisplayAlerts = False
                    Worksheets("Data Entry").Delete
                    Application.DisplayAlerts = True

                    MsgBox ("Sheet Deleted")

                End If

            Next i

            Exit Sub

err_handler:
        MsgBox Err.Description

        End Sub

1
投票

为什么不尝试这个呢?

Private Sub CommandButton1_Click()
Dim DataEntryWs As Worksheet
    On Error Resume Next
    Set DataEntryWs = Sheets("Data Entry")
    On Error GoTo 0

    If Not DataEntryWs Is Nothing Then
        DataEntryWs.Cells.Clear
        MsgBox "Sheet Data Entry cleared.", vbInformation
    Else
        MsgBox "Adding new sheet now.", vbInformation
        With ThisWorkbook
            Set DataEntryWs = .Sheets.Add(after:=.Sheets(.Sheets.Count))
            DataEntryWs.Name = "Data Entry"
        End With
    End If
    DataEntryWs.Activate
    Call Data_Entry_Calcs
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.