错误处理程序甚至没有错误

时间:2018-03-26 05:15:23

标签: vba excel-vba excel

我对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也能正常工作。

我该怎么做这个?

2 个答案:

答案 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位。如果您可以编写代码以避免所有潜在错误(包括验证上述用户输入),那就更好了。