Quando si sviluppa una macro per l’utilizzo da parte di altri, è possibile aggiungere un metodo per consentire all’utente di uscire dalla macro prima che termini e mantenere il controllo di ciò che fa la macro. Ctrl + Break interromperà una macro, ma non verrà chiusa correttamente, poiché consente all’utente di visualizzare il codice nell’editor VBA.

Esistono diversi modi per affrontare questo problema. Il primo è creare un prompt “vuoi uscire” nella tua macro, quindi fare in modo che la macro visualizzi periodicamente il prompt. Ad esempio, considera il seguente codice:

Do ...



'    your code goes here

Counter = Counter + 1     If Counter Mod 25 = 0 Then         If MsgBox("Stop Macro?", vbYesNo) = vbYes Then End     End If Loop

La costruzione della macro si basa sulla premessa che si hanno una serie di passaggi che si desidera ripetere più e più volte, attraverso l’uso di una struttura Do …​ Loop. Ogni volta che si esegue il ciclo, il valore di Counter viene incrementato. Ogni 25 volte nel ciclo, il messaggio “stop macro?” viene visualizzato il prompt e l’utente ha la possibilità di uscire.

Questo approccio è facile da implementare e può funzionare abbastanza bene per alcuni scopi. Il più grande svantaggio di questo approccio, tuttavia, è che non consente l’immediatezza: l’utente deve attendere per uscire dalla macro finché non si sono verificate almeno 25 iterazioni.

Un altro approccio consiste nel “nascondere” il codice VBA e applicarvi una password.

Puoi farlo seguendo questi passaggi dall’editor VBA:

  1. Scegli l’opzione Proprietà VBAProject dal menu Strumenti. L’editor visualizza la finestra di dialogo Proprietà progetto.

  2. Assicurati che la scheda Protezione sia visualizzata. (Vedi figura 1.)

  3. Scegliere la casella di controllo Blocca progetto per visualizzazione.

  4. Nella casella Password immettere una password che si desidera utilizzare per proteggere la macro.

  5. Nella casella Conferma password, inserisci la stessa password una seconda volta.

  6. Fare clic su OK.

Chiudi l’editor VBA, quindi salva la cartella di lavoro. Con il progetto VBA protetto, l’utente può ancora fare clic su Ctrl + Interruzione per interrompere la macro, ma non sarà in grado di accedere al codice del programma effettivo. Potranno solo scegliere tra i pulsanti Continua o Fine, che proteggono entrambi il tuo codice. Come ulteriore vantaggio, questo approccio limita anche all’utente la visualizzazione del codice utilizzando scelte di menu, barra degli strumenti o barra multifunzione.

Forse l’approccio migliore, tuttavia, è creare un gestore degli errori che essenzialmente si prenderà carico ogni volta che l’utente preme Esc o Ctrl + Break. Il gestore che viene eseguito può quindi chiedere all’utente se desidera davvero uscire e quindi chiudersi normalmente se lo fa. Ecco un po ‘di codice di esempio che mostra come farlo:

Sub Looptest()

Application.EnableCancelKey = xlErrorHandler     On Error GoTo ErrHandler

Dim x As Long     Dim y As Long     Dim lContinue As Long

y = 100000000     For x = 1 To y Step 1     Next

Application.EnableCancelKey = xlInterrupt     Exit Sub

ErrHandler:

If Err.Number = 18 Then         lContinue = MsgBox(prompt:=Format(x / y, "0.0%") & _           " complete" & vbCrLf & _           "Do you want to Continue (YES)?" & vbCrLf & _           "Do you want to QUIT? [Click NO]", _           Buttons:=vbYesNo)

If lContinue = vbYes Then             Resume         Else             Application.EnableCancelKey = xlInterrupt             MsgBox ("Program ended at your request")

Exit Sub         End If     End If

Application.EnableCancelKey = xlInterrupt End Sub

Si noti che questo esempio utilizza il metodo EnableCancelKey, assegnandogli il nome dell’etichetta a cui si dovrebbe saltare se si preme il tasto Annulla (Esc o Ctrl + Break). In questo caso, si passa a ErrHandler e all’utente viene chiesto cosa fare. Se l’utente sceglie di uscire, la macro viene chiusa normalmente.

Notare che la prima cosa da fare dopo l’etichetta ErrHandler è controllare se la proprietà Number dell’oggetto Err è uguale a 18. In caso affermativo, si sa che è stato premuto un tasto Annulla. In caso contrario, si è verificato un altro tipo di errore e dovrebbe essere gestito in qualsiasi modo sia appropriato per la tua macro.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (139) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: