Come utilizzare gli eventi della cartella di lavoro in VBA

Sommario:

Anonim

Potresti voler eseguire il tuo frammento macro/VBA quando viene selezionata una cartella di lavoro specifica, viene selezionato un foglio nella cartella di lavoro, la cella cambia il suo valore, quando si verifica un doppio clic, quando viene aggiunto un foglio, ecc. In tutti questi casi usiamo Gestore eventi cartella di lavoro. L'Event Handler ci aiuta a eseguire il codice VBA ogni volta che si verifica un determinato evento.

In questo articolo, impareremo brevemente su ogni gestore di eventi della cartella di lavoro.

Che cos'è un gestore di eventi della cartella di lavoro?

Un gestore di eventi della cartella di lavoro è una subroutine locale a una cartella di lavoro. Questi codici funzionano solo sui componenti di una cartella di lavoro. Quella è la cartella di lavoro stessa, sono fogli e intervalli.

Dove scrivere il codice del gestore eventi della cartella di lavoro?

Gli eventi della cartella di lavoro vengono scritti solo nell'oggetto cartella di lavoro. Se scrivi un evento della cartella di lavoro in un modulo normale, non ci saranno errori ma semplicemente non funzioneranno.

Per scrivere nell'oggetto cartella di lavoro. Fare doppio clic su di esso o fare clic con il pulsante destro del mouse e fare clic sul codice di visualizzazione. Verrà visualizzata l'area di scrittura del codice.

Come scrivere il codice per un evento specifico nella cartella di lavoro?

Ora, quando sei in modalità di modifica, nel menu a discesa nell'angolo in alto a sinistra, vedrai generale. Fare clic sul menu a discesa e selezionare la cartella di lavoro. Nel menu a discesa nell'angolo in alto a destra, verranno visualizzati tutti gli eventi. Scegli quello di cui hai bisogno e un codice scheletrico per quell'evento verrà scritto per te.

Ogni evento ha un nome di procedura fisso. Questi sono i nomi delle subroutine riservate che iniziano con workbook_. Non puoi usarli per altre subroutine
(puoi, ma saranno normali subroutine).

Importante: Ogni subroutine di quell'elenco verrà eseguita sull'evento specificato.

Un tipo di procedura evento cartella di lavoro può essere scritto una sola volta su una cartella di lavoro. Se si scrivono due stesse procedure di gestione degli eventi in una cartella di lavoro, verrà generato un errore e nessuna di esse verrà eseguita. Naturalmente, l'errore saranno le subroutine ambigue.

Impariamo brevemente su ciascuno degli eventi.
1. Il Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) Evento

Questo evento si attiva quando apportiamo modifiche ai fogli di lavoro contenenti (formattazione esclusa). Se vuoi fare qualcosa in caso di modifiche apportate in qualsiasi foglio, il codice sarà:

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'fai qualcosa Msgbox "fatto qualcosa" End Sub 

La "Sh" è sempre il foglio attivo. Il "Target" è la cella sempre attiva.

Un altro esempio: Potresti voler inserire data e ora in Cel,prl B1 se A1 cambia. In tal caso, utilizziamo l'evento workbook_sheetchange. Il codice sarebbe simile a questo:

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1").Value2 = Format(Now(), "hh:mm:ss") End If Fine sottotitolo 

Questo avrà come target solo la cella A1 su ogni foglio poiché non abbiamo specificato l'oggetto "sh".

2. Il Cartella di lavoro_Attiva() Evento

Questo evento viene attivato quando si attiva il codice evento contenente la cartella di lavoro. Il codice scheletrico per questo evento è:

 Private Sub Workbook_Activate() End Sub

Un semplice esempio mostra il nome della cartella di lavoro quando viene selezionato.

 Private Sub Workbook_Activate() MsgBox "Sei nella cartella di lavoro " & Activeworkbook.Name End Sub 

Non appena arriverai sulla cartella di lavoro che contiene questo codice, l'evento verrà eseguito e verrà mostrato un messaggio che "Sei nel nome della cartella di lavoro" (foglio2 è nel mio caso).
3. Il Cartella_Apri() Evento

Questa è una delle domande più frequenti su come eseguire una macro non appena si apre la cartella di lavoro. Questa è la risposta. Questo evento della cartella di lavoro viene eseguito non appena viene aperta la cartella di lavoro. A differenza di Workbook_Activate(), questo codice viene eseguito solo una volta, non ogni volta che viene attivato.

Private Sub Workbook_Open() 'il tuo codice' End Sub 

Il seguente evento Workbook_Open di esempio farà apparire semplicemente un messaggio di benvenuto, quando apri il codice contenente la cartella di lavoro.

 Private Sub Workbook_Open() MsgBox "Benvenuto nel file principale" End Sub

4. Il Cartella di lavoro_Disattiva() Evento

Questo evento si attiva quando si lascia il codice contenente la cartella di lavoro. In altre parole, se vuoi fare qualcosa, come nascondere fogli o altro quando cambi cartella di lavoro, usa questo evento VBA. La sintassi è:

 Private Sub Workbook_Deactivate() 'il tuo codice' End Sub 

L'esempio di seguito Workbook_Deativate evento farà semplicemente apparire un messaggio che hai lasciato il foglio principale, quando lascerai questo foglio.

 Private Sub Workbook_Deactivate() MsgBox "Hai lasciato il foglio principale" End Sub 

5. Il Cartella di lavoro_Prima della chiusura() Evento

Questo evento si attiva quando si conferma l'eliminazione dell'evento VBA contenente il foglio. La sintassi è semplice:

 Private Sub Workbook_BeforeClose (Annulla come booleano) End Sub 

Annulla può essere impostato su true se si desidera mantenere aperta la cartella di lavoro.
Il codice seguente ti chiederà se desideri salvare il contenuto della cartella di lavoro in procinto di chiudere.

 Private Sub Workbook_BeforeClose(Cancel as Boolean) ans = MsgBox("Vuoi salvare il contenuto di questa cartella di lavoro?", vbYesNo) If ans = True Then thisworkbook.save End If End Sub 

6. Il Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Evento

Questo evento si attiva prima del salvataggio della cartella di lavoro. La sintassi è semplice:

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub 

SaveAsUI è impostato su True se c'è una modifica nella cartella di lavoro (non in VBA).

Annulla può essere impostato su true se si desidera mantenere la cartella di lavoro non salvata.

Il codice seguente ti chiederà se desideri salvare il contenuto della cartella di lavoro in procinto di salvare.

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Vuoi davvero salvare il contenuto di questa cartella di lavoro?", vbYesNo) If ans = False Then Cancel = True End If End Sub 

7. Il Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Evento

Questo evento si attiva prima del salvataggio della cartella di lavoro. La sintassi è semplice:

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub 

SaveAsUI è impostato su True se c'è una modifica nella cartella di lavoro (non in VBA).

Annulla può essere impostato su true se si desidera mantenere la cartella di lavoro non salvata.

Il codice seguente ti chiederà se desideri salvare il contenuto della cartella di lavoro in procinto di salvare.

 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Vuoi davvero salvare il contenuto di questa cartella di lavoro?", vbYesNo) If ans = False Then Cancel = True End If End Sub 

8. Il Workbook_NewSheet(ByVal Sh come oggetto) Evento

Questo evento si attiva quando aggiungi un nuovo foglio alla cartella di lavoro. La sintassi è semplice:

 Private Sub Workbook_NewSheet(ByVal Sh As Object) End Sub 

La Sh è l'oggetto di lavoro. Il tipo è in realtà un oggetto principale, quindi se aggiungiamo un foglio grafico, un foglio macro o un foglio di dialogo, l'evento funziona ancora.

Il codice seguente aggiungerà e mostrerà il nome del foglio appena aggiunto.

 Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "Hai aggiunto un nuovo foglio." & Sh.Name End Sub 

Ci sono molti più eventi dell'oggetto cartella di lavoro. Non possiamo discuterli tutti qui. Se vuoi conoscere qualche evento specifico, chiedi nella sezione commenti qui sotto. Spero di essere stato in grado di spiegare le basi degli eventi della cartella di lavoro in questo articolo. Fammi sapere se ti è stato d'aiuto nella sezione commenti qui sotto.
Articoli Correlati:

Utilizzo dell'evento di modifica del foglio di lavoro per eseguire la macro quando viene apportata una modifica | Quindi, per eseguire la tua macro ogni volta che il foglio si aggiorna, utilizziamo gli eventi del foglio di lavoro di VBA.

Esegui macro se vengono apportate modifiche al foglio nell'intervallo specificato | Per eseguire il codice della macro quando cambia il valore in un intervallo specificato, utilizza questo codice VBA. Rileva qualsiasi modifica apportata nell'intervallo specificato e attiverà l'evento.

Il codice VBA più semplice per evidenziare la riga e la colonna correnti utilizzando | Usa questo piccolo frammento VBA per evidenziare la riga e la colonna correnti del foglio.

Articoli popolari:

50 scorciatoie di Excel per aumentare la produttività | Diventa più veloce nel tuo compito. Queste 50 scorciatoie renderanno il tuo lavoro ancora più veloce su Excel.

La funzione CERCA.VERT in Excel | Questa è una delle funzioni più utilizzate e popolari di Excel che viene utilizzata per cercare il valore da diversi intervalli e fogli.

CONTA.SE in Excel 2016 | Conta i valori con le condizioni usando questa fantastica funzione. Non è necessario filtrare i dati per contare un valore specifico. La funzione Countif è essenziale per preparare la tua dashboard.

Come utilizzare la funzione SOMMA.SE in Excel | Questa è un'altra funzione essenziale della dashboard. Questo ti aiuta a riassumere i valori su condizioni specifiche.