2016-01-07 2 views
0

Я пишу макрос, чтобы перенумеровать точки и линии. В следующем коде Err.Number не сбрасывается, и код разбивается на 2-й экземпляр ошибки. Как это исправить?Ошибка Сброс не работает

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 

ответ

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 объекта не волшебным образом перезагружается, потому что вы переходите на метку в случае ошибки.

+0

избил меня к нему! Чип Пирсон имеет хороший раздел об обработке ошибок: http://www.cpearson.com/excel/errorhandling.htm – CodeJockey

1

В VBA после того, как скрипт выдает сообщение об ошибке, он не автоматически сбрасывается из-за того, что у вас включен обработчик ошибок. Чтобы правильно сбросить ошибку, вы должны иметь оператор Resume. Типичные режимы обработки ошибок выглядеть следующим образом:

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  

Более подробное описание о том, как использовать обработку ошибок, см сайта Chip Пирсона: http://www.cpearson.com/excel/errorhandling.htm

Смежные вопросы