On Error GoTo ... Resume Statement

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок послС появлСния ошибки ΠΈΠ»ΠΈ возобновляСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Бинтаксис:

On Error Statement diagram


On [Local] Error {GoTo Labelname | GoTo 0 | Resume Next}

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

GoTo ΠœΠ΅Ρ‚ΠΊΠ°_строки. Если Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, которая начинаСтся со строки "ΠœΠ΅Ρ‚ΠΊΠ°_строки".

Resume Next. Если Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ продолТаСтся с инструкции, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° инструкциСй, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ эта ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π°.

GoTo 0: ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅.

Local: "On error" ΠΏΠΎ контСксту являСтся Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ остаётся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ "On error". "On Local error" являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΉ этот элСмСнт. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок пСрСопрСдСляСт всС Ρ€Π°Π½Π΅Π΅ установлСнныС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠŸΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ локальная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ автоматичСски, Π° установлСнныС Ρ€Π°Π½Π΅Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ On Error GoTo ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для рСагирования Π½Π° ошибки Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ Π² макросС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


Sub ExampleReset
On Error GoTo ErrorHandler
    Dim iNumber As Integer
    Dim iCount As Integer
    Dim sLine As String
    Dim aFile As String
    aFile = "C:\Users\ThisUser\data.txt"
    iNumber = Freefile
    Open aFile For Output As #iNumber
    Print #iNumber, "Π­Ρ‚ΠΎ строка тСкста"
    Close #iNumber
    iNumber = Freefile
    Open aFile For Input As iNumber
    For iCount = 1 To 5
        Line Input #iNumber, sLine
        If sLine <>"" Then
            Rem
        End If
    Next iCount
    Close #iNumber
    Exit Sub
ErrorHandler:
    Reset
    MsgBox "All files will be closed",  0,  "Error"
End Sub