我在这里有一些代码(下面)我需要清除工作表“数据输入”中的数据,可能还有其他更快的方法,但是我选择了删除和重制。请随时说出来。
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
循环,看看这是否有任何不同,但没有成功。
如何清除该工作表的内容而不是删除它,例如:
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
你可以尝试这个吗?如果我理解您正在尝试正确执行的操作,则不需要循环来执行此操作
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
你能试试这段代码,让我知道会发生什么,是的,当我运行它时,我确实得到了消息框...
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
为什么不尝试这个呢?
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