Erorile pot să apară din cauza codului, dar trebuie să decideți și ce se va întâmpla dacă un utilizator încearcă să întrerupă codul apăsând Ctrl + Break în timpul executării. Unele gazde VBA, inclusiv Word și Excel, vă oferă trei opțiuni:
Dezactivarea introducerii datelor în timpul rulării procedurii
Pentru a dezactiva introducerea datelor de către utilizator în timp ce se execută o procedură, dezactivați combinația de taste Ctrl + Break setând proprietatea EnableCancelKey a obiectului Application la wdCancelDisabled (în Word) sau xlDisabled (în Excel):
Application.EnableCancelKey = wdCancelDisabled 'pentru Word
Application.EnableCancelKey = xlDisabled 'pentru Excel
După terminarea execuției procedurii, VBA comută automat la permiterea introducerii de date. Se poate reactiva introducerea de date și în timpul rulării procedurii prin setarea proprietății EnableCancelKey la wdCancelInterrupt (în Word) sau xlInterrupt (în Excel):
Application.EnableCancelKey = wdCancelInterrupt 'Word
Application.EnableCancelKey = xlInterrupt 'Excel
Excel oferă și o a trei setare, xlErrorHandler, care urmărește apăsarea tastelor Ctrl+Break ca eroare 18. Această eroare se poate manipula ca și oricare altă eroare. Iată un exemplu:
Sub CancelKey_Example()
Dim i As Long
On Error GoTo EH
Application.EnableCancelKey = xlErrorHandler
For i = 1 To 100000000 ' bucla care dureaza mai mult
Application.StatusBar = i
Next i
EH:
If Err.Number = 18 Then
If MsgBox("Doriti sa opriti procedura?" _
& vbCr & vbCr & "If not, stop pressing Ctrl+Break!", _
vbYesNo + vbCritical, "Intrerupere detectata") = vbYes Then End
End If
End Sub
Dezactivarea introducerii de date de către utilizator în timpul rulării unei macrocomenzi
Se poate dezactiva temporar introducerea de date de către utilizator în timpul rulării unei proceduri, pentru o parte a procedurii care nu trebuie întreruptă. După executarea acelei părți, se poate reactiva introducerea datelor.
De exemplu, să presupunem că în procedură există cod care mută mai multe fișiere dintr-un folder în altul. În acel moment, codul nu trebuie întrerupt. Dacă ar fi întrerupt, unele fișiere ar rămâne în folderul sursă și altele în folderul destinație.
Iată un exemplu în Word:
'pana aici sunt permise actiuni de intrerupere
Application.EnableCancelKey = wdCancelDisabled
For i = 1 to LastFile
SourceFile = Source & "\Section" & i
DestFile = Destination & "\Section" & i
Name SourceFile As DestFile
Next i
Application.EnableCancelKey = wdCancelInterrupt
'de aici sunt permise actiunile de intrerupere