错误重置不起作用

我正在写一个macros来重新编号和行。 在下面的代码中, Err.Number不重置,代码在第二个错误实例中中断。 如何解决这个问题?

 S = 0 SS = 0 Surfaces = Y Do SS = SS + 1 Handler: S = S + 1 On Error GoTo Handler Set hybridBodyShape1 = hybridBodyShapes1.Item("Line_Extract_" & S) hybridBodyShape1.Name = "Line_Extract_" & SS Set hybridBodyShape1 = hybridBodyShapes1.Item("Point_Extract_" & S) hybridBodyShape1.Name = "Point_Extract_" & SS On Error GoTo 0 Loop Until S = Surfaces - 1 

我不知道你期望的循环(或你的错误“处理程序”),但你可能应该改变实现这样的事情:

 On Error Resume Next Do If Err.Number = 0 Then SS = SS + 1 Err.Clear S = S + 1 Set hybridBodyShape1 = hybridBodyShapes1.Item("Line_Extract_" & S) hybridBodyShape1.Name = "Line_Extract_" & SS If Err.Number = 0 Then Set hybridBodyShape1 = hybridBodyShapes1.Item("Point_Extract_" & S) hybridBodyShape1.Name = "Point_Extract_" & SS End If Loop Until S = Surfaces - 1 On Error GoTo 0 

Err对象不会因为在错误的情况下跳转到标签而自动复位。

在VBA中,脚本一旦抛出错误,就不会因为启用了error handling程序而自动重置。 要正确地重置错误,您应该在某处具有Resume语句。 典型的error handling例程如下所示:

 Sub ErrorProne() Dim i As Integer Dim myArr(4) As Integer On Error Goto ErrHndl Do While True myArr(i) = i '<-- will bug on 5th iteration Loop PostLoop: 'More code goes here Exit Sub ErrHndl: Resume PostLoop End Sub 

有关如何使用error handling的更完整说明,请参见Chip Pearson的网站: http : //www.cpearson.com/excel/errorhandling.htm