Potresti voler eseguire la tua macro / frammento VBA quando è selezionata una cartella di lavoro specifica, un foglio nella cartella di lavoro è selezionato, 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. Il gestore eventi ci aiuta a eseguire il codice VBA ogni volta che si verifica un determinato evento.

In questo articolo impareremo brevemente 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.

Questo codice funziona solo sui componenti di una cartella di lavoro. Questa è la cartella di lavoro stessa, i fogli e gli 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 tasto destro 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 che ti serve e un codice scheletrico per quell’evento verrà scritto per te.

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

Importante: Ogni subroutine da quell’elenco verrà eseguito sull’evento specificato.

_Un tipo di routine evento della cartella di lavoro può essere scritto solo una 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.

Ovviamente, l’errore sarà subroutine ambigue._

Impariamo brevemente su ciascuno degli eventi.

  1. Evento Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) Questo evento si attiva quando si apportano modifiche ai fogli di lavoro contenenti (formattazione esclusa). Se vuoi fare qualcosa se vengono apportate modifiche a qualsiasi foglio, il codice sarà:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

'do something

Msgbox "done something"

End Sub

La “Sh” è sempre il foglio attivo. Il “Target” è sempre la cella Attiva.

Un altro esempio: potresti voler inserire la data e l’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

End Sub

Questo mirerà solo alla cella A1 su ogni foglio poiché non abbiamo specificato l’oggetto “sh”.

  1. Evento Workbook_Activate () 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 selezionata.

Private Sub Workbook_Activate()

MsgBox "You are on workbook " & Activeworkbook.Name

End Sub

Non appena arriverete sulla cartella di lavoro che contiene questo codice, l’evento verrà eseguito e verrà mostrato un messaggio che “Sei su nome cartella di lavoro” (foglio2 è nel mio caso).

  1. L’evento Workbook_Open () 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 la cartella di lavoro viene aperta. A differenza di Workbook_Activate (), questo codice viene eseguito solo una volta, non ogni volta che viene attivato.

Private Sub Workbook_Open()

'your code

'

End Sub

L’esempio di seguito Workbook_Open evento mostrerà semplicemente un messaggio di benvenuto, quando apri il codice contenente la cartella di lavoro.

Private Sub Workbook_Open()

MsgBox "Welcome to the Master File"

End Sub
  1. L’evento Workbook_Deactivate () 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()

'your code

'

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 "You Left The Master Sheet"

End Sub
  1. Evento Workbook_BeforeClose () Questo evento si attiva quando si conferma l’eliminazione dell’evento VBA contenente il foglio. La sintassi è semplice:

Private Sub Workbook_BeforeClose(Cancel as Boolean)

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 che sta per chiudere.

Private Sub Workbook_BeforeClose(Cancel as Boolean)

ans = MsgBox("Do you want to save the content of this workbook?", vbYesNo)

If ans = True Then

thisworkbook.save

End If

End Sub
  1. Evento Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) 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 che sta per salvare.

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

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. Evento Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) 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 che sta per salvare.

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

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. L’evento Workbook_NewSheet (ByVal Sh As Object) Questo evento viene generato quando si aggiunge un nuovo foglio alla cartella di lavoro. La sintassi è semplice:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

End Sub

Sh è l’oggetto di lavoro. Il tipo è effettivamente 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 "You added a new sheet. " & Sh.Name

End Sub

Ci sono molti altri 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 ha aiutato nella sezione commenti qui sotto.

Articoli correlati:

link: / tips-using-worksheet-change-event-to-run-macro-when-any-change-is-made [Using Worksheet Change Event To Run Macro When any Change is made] | Quindi, per eseguire la macro ogni volta che il foglio viene aggiornato, utilizziamo gli eventi del foglio di lavoro di VBA.

link: / events-in-vba-run-macro-if-any-change-made-on-sheet-range [Run Macro If Any Change Made on Sheet in Specified Range] | Per eseguire il codice macro quando il valore in un intervallo specificato cambia, utilizzare questo codice VBA. Rileva qualsiasi modifica effettuata nell’intervallo specificato e attiverà l’evento.

link: / events-in-vba-semplice-vba-code-to-highlight-current-row-and-column-using [Codice VBA più semplice per evidenziare riga e colonna correnti utilizzando] | Usa questo piccolo frammento VBA per evidenziare la riga e la colonna correnti del foglio.

Articoli popolari:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-aumentare-la-produttività [50 scorciatoie Excel per aumentare la produttività] | Diventa più veloce nel tuo compito. Queste 50 scorciatoie renderanno il tuo lavoro ancora più veloce su Excel.

link: / formule-e-funzioni-introduzione-di-vlookup-funzione [La funzione CERCA.VERT in Excel] | Questa è una delle funzioni più utilizzate e popolari di Excel che viene utilizzata per cercare valori da diversi intervalli e fogli. link: / tips-countif-in-microsoft-excel [COUNTIF in Excel 2016] | Contare i valori con le condizioni utilizzando questa straordinaria funzione. Non è necessario filtrare i dati per contare un valore specifico.

La funzione Countif è essenziale per preparare la tua dashboard.

link: / excel-formula-and-function-excel-sumif-function [Come usare la funzione SUMIF in Excel] | Questa è un’altra funzione essenziale della dashboard. Questo ti aiuta a riassumere i valori su condizioni specifiche.