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 WordApplication.EnableCancelKey = xlDisabled 'pentru ExcelDupă 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 'WordApplication.EnableCancelKey = xlInterrupt 'ExcelExcel 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 SubDezactivarea 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