Manipularea întreruperilor datorate utilizatorului în Word, Excel și Project

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:

  • Puteți permite unui utilizator să întrerupă codul. Acesta este mod cel mai simplu (și nu necesită niciun efort din partea dvs.), dar în proceduri complexe, poate cauza probleme. De exemplu, este posibil ca utilizatorul să fi petrecut cinci minute tastând datele, doar pentru a le pierde, deoarece datele nu au fost salvate din cauza încheierii timpurii a programului.
  • Puteți preveni întreruperile utilizatorului prin dezactivarea posibilității de acționare a utilizatorului în timpul desfășurării procedurii. Acest lucru este simplu de făcut, dar riscați să creați un cod de neoprit dacă o procedură intră într-o buclă nesfârșită. Utilizatorul va trebui să pornească aparatul sau, cel puțin, să deschidă Task Manager pentru a opri programul. Orice lucrare nesalvată în procedură sau chiar aplicația gazdă va fi pierdută. Este posibil ca utilizatorul să fi tastat ore întregi fără să-și salveze munca.
  • Ca un compromis între primele două opțiuni, puteți permite întreruperile utilizatorului în anumite părți ale unei proceduri și să împiedicați întreruperile utilizatorului în timpul părților mai critice ale unei proceduri.

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