如果与用户输入的值匹配,我正在尝试删除工作簿中的工作表。如果该值不存在,则显示错误消息。有比我目前拥有的更好的方法吗?
最初,我尝试了一个带有多个if语句的嵌套if循环来获取达到的结果,但是那没有用。下面的代码是我所要学习的,但其中仍然存在一些错误。例如,当满足第一个FOR条件时,两个FOR语句都会出现消息框(不正确)。
Dim ws As Worksheet
Private Sub cmdDeleteProj_Click()
'
'Remove project sheet after project has been completed
'
'Show error message if user input field is blank
If txtRemProjNum.Value = "" Then
MsgBox "Input valid project number to continue.", vbExclamation, "Required Field Left Blank"
uf_RemProj.txtRemProjNum.SetFocus
End If
'Delete user defined project sheet if it exists
On Error Resume Next
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = txtRemProjNum Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
MsgBox "Project removed from inventory tracker."
End If
Next ws
'Show error message if project does not exist
On Error Resume Next
For Each ws In ActiveWorkbook.Worksheets
If txtRemProjNum.Value <> "" And ws.Name <> txtRemProjNum Then
MsgBox "Project number not found." & vbNewLine & "" & vbNewLine & "Input valid project number.", vbCritical, "Out of Range"
uf_RemProj.txtRemProjNum.Text = ""
uf_RemProj.txtRemProjNum.SetFocus
End If
Next ws
End Sub
我希望工作表(如果存在)被删除,但是无法使if语句和FOR循环正常工作。
答案 0 :(得分:1)
试试吧,让我知道任何问题。我没有过多评论,因为代码流应该是不言自明的。
{{1}}
答案 1 :(得分:0)
我认为您看到这两个消息是因为工作表在第一个循环中,而不是在第二个循环中。为什么不循环一次并使用elseif
语句
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = txtRemProjNum Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
MsgBox "Project removed from inventory tracker."
ElseIf
txtRemProjNum.Value <> "" And ws.Name <> txtRemProjNum Then
MsgBox "Project number not found." & vbNewLine & "" & vbNewLine & "Input
valid project number.", vbCritical, "Out of Range"
uf_RemProj.txtRemProjNum.Text = ""
uf_RemProj.txtRemProjNum.SetFocus
End If
Next ws