Chris ha, al lavoro, un grande foglio di lavoro che include diverse macro. Uno di questi elimina un blocco di celle e sposta il resto verso l’alto. A volte, tuttavia, gli utenti non useranno la macro e, invece, elimineranno manualmente il blocco. È un disastro se l’eliminazione sposta le celle a sinistra invece che in alto.

Chris si chiede se esiste un modo per utilizzare le macro per imporre lo spostamento verso l’alto delle celle e precludere il movimento manuale delle celle a sinistra.

Come per molte cose in Excel, esistono diversi modi per affrontare questo problema. Non posso approfondire troppo i dettagli qui, poiché qualsiasi approccio selezionato alla fine dipenderà dalla natura delle informazioni nel foglio di lavoro e da ciò che si desidera consentire o non consentire. Le sezioni seguenti, tuttavia, possono fornire la chiave necessaria per scegliere l’approccio migliore per te.

Proteggi il foglio di lavoro

Un approccio semplice (ed efficace) consiste nel progettare il foglio di lavoro in modo che possa essere protetto. Ovviamente, dovresti assicurarti che tutte le celle in cui l’utente deve inserire le informazioni non siano protette, ma altrimenti la tua macro può assicurarsi che quando il foglio di lavoro è attivato, sia protetto.

Ciò preclude la possibilità che l’utente elimini manualmente qualsiasi cella dal foglio di lavoro.

Ciò significa che se l’intervallo di celle deve essere eliminato, l’utente è costretto (dalla protezione) a selezionare la macro per l’eliminazione. La macro può quindi rimuovere la protezione del foglio di lavoro, eliminare l’intervallo di celle e proteggerlo nuovamente.

Intercepting Deletes

Un altro approccio basato su macro consiste nel lavorare con l’evento BeforeDelete per controllare cosa accade effettivamente. Quello che segue è un semplice gestore di eventi che potrebbe essere la base di ciò che usi effettivamente:

Private Sub Worksheet_BeforeDelete()

Dim delRng As Range     Dim selRng As Range

On Error Resume Next     Set delRng = Range("C2:D5")  ' Change the range to the block                                  ' of cells to be deleted (manually                                  ' or by macro)

Set selRng = Application.Selection  ' Cells selected manually                                         ' by the user     If MyRng.Address = delRng.Address Then         Selection.Delete shift:=xlUp     End If End Sub

Il gestore di eventi confronta semplicemente l’intervallo che si desidera eliminare solo verso l’alto con l’intervallo selezionato dall’utente per l’eliminazione. Se gli intervalli sono gli stessi, il gestore elimina l’intervallo e lo sposta verso l’alto. Dovresti, ovviamente, modificare l’intervallo assegnato alla variabile delRng in modo che corrisponda all’intervallo che desideri monitorare.

Rimappare il tasto Elimina

Parlando di eliminazione, potresti anche rimappare il tasto Canc in modo che faccia quello che vuoi. Tutto quello che devi fare è includere una macro come la seguente nel modulo del codice di ThisWorkbook:

Private Sub Workbook_Open()

Application.OnKey "{DELETE}", "MyMacro()"

End Sub

Ciò significa che quando la cartella di lavoro viene aperta, il tasto Elimina viene rimappato in modo che ogni volta che viene premuto, MyMacro (modificalo in qualsiasi macro desideri) viene eseguito automaticamente.

Notare che questo approccio influisce solo sulla pressione del tasto Canc; non influisce sulle eliminazioni effettuate in altro modo. Per quelli, le tue macro dovrebbero comunque anticipare e gestire la logica.

L’approccio completo

Questo ci porta all’approccio completo. Questo approccio significa semplicemente fare un elenco di tutti i vari modi in cui l’utente potrebbe avviare un’eliminazione e quindi intercettare quei modi. L’elenco (e le intercettazioni) dovrebbero necessariamente includere alcuni degli approcci già discussi, come la gestione del tasto Canc. Dovresti anche capire come disabilitare o modificare cosa accade quando l’utente fa clic con il pulsante destro del mouse o quando seleziona un’opzione di eliminazione dalla barra multifunzione.

(Potresti anche voler rimuovere le opzioni relative alla cancellazione dall’interfaccia utente.)

Questo approccio può essere piuttosto lungo, poiché un elenco esaustivo di metodi di eliminazione potrebbe essere laborioso da mettere insieme e gestire.

_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 (13632) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.