我对Excel VBA很新,我在错误处理程序方面遇到了麻烦(使用On Error Goto [label])。我的代码有点遵循这个流程:
StartDate = Format(Cells(11, 4).Value, "yyyy-mm-dd")
EndDate = Format(Cells(12, 4).Value, "yyyy-mm-dd")
For Each WS In Worksheets
If WS.Name Like "WS_Name" Then
Exist = True
Exit For
End If
Next
On Error GoTo EHandler: '[ERROR HANDLER POINT A]
If Exist = True Then
On Error GoTo EHandler: '[ERROR HANDLER POINT B]
ActiveWorkbook.Sheets("WS_Name").Select
Sheets("WS_Name").Cells.ClearContents
With 'some code that uses the StartDate and EndDate in a SQL query in a database
End With
Else
ActiveWorkbook.Worksheets.Add.Name = "WS_Name"
With 'some code that uses the StartDate and EndDate in a SQL query in a database
End With
End If
Exit Sub
EHandler:
'some code that would show the error number and desc
End Sub
我想为用户可能输入比StartDate更早的EndDate的事件设置错误处理程序。我尝试在ERROR HANDLER POINTS A& A上插入On Error Goto [标签]。 B并且有不同的结果。
如果我的On Error Goto [标签]在POINT A上,EHandler无法正常工作。
如果我的On Error Goto [标签]在POINT B上,即使输入的日期正确,EHandler也能正常工作。
我该怎么做这个?
答案 0 :(得分:0)
您当前的代码可以简化为此(注意您的With语句仍然没有引用对象)。
*ngFor
答案 1 :(得分:0)
我想为用户可能设置的事件设置错误处理程序 输入比我的StartDate更早的EndDate。
If EndDate < StartDate Then
' Some code here
Else
' all your other code here
End If
您编写的代码取决于您希望如何处理错误。以上为您提供了一些灵活性,但也可以“软失败”,您可以安静地纠正用户的错误
If EndDate < StartDate Then
' Swap the dates
TempDate = EndDate
EndDate = StartDate
StartDate = TempDate
End If
' all your other code here
总是一个好主意,找出可能发生的错误并在代码中处理它们;保留意外的On Error
位。如果您可以编写代码以避免所有潜在错误(包括验证上述用户输入),那就更好了。