Possiamo avere eventi della cartella di lavoro (come apertura, chiusura, ecc.) che possono essere trigger (interruttori) per il codice VBA.
Per seguire le istruzioni all'apertura della cartella di lavoro, vai a ThisWorkbook e seleziona Workbook:
L'evento Workbook_Open verrà aggiunto per impostazione predefinita e si attiverà all'apertura della cartella di lavoro:
Private Sub Workbook_Open() End Sub
Ad esempio, se aggiungiamo la seguente istruzione, la finestra di dialogo verrà visualizzata all'apertura della cartella di lavoro:
Private Sub Workbook_Open() MsgBox "Welcome" End Sub
Per eseguire le istruzioni prima di chiudere la cartella di lavoro, selezionare BeforeClose:
Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub
La chiusura di una cartella di lavoro può essere annullata impostando la variabile "Cancel" su True.
Di seguito è riportato un esempio in cui all'utente viene chiesta conferma per chiudere la cartella di lavoro:
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Se l'utente risponde con NO, allora la variabile Cancel avrà il valore TRUE (che annullerà la chiusura della cartella di lavoro) If MsgBox("Do you really want to close this workbook ?", 36, "I confirm") = vbNo Then Cancel = True End If End Sub
Questo evento si verifica immediatamente prima del salvataggio della cartella di lavoro:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
Il salvataggio di un file può essere annullato impostando la variabile "Cancel" su True.
Questo evento si verifica prima che la cartella di lavoro venga stampata:
Private Sub Workbook_BeforePrint(Cancel As Boolean) End Sub
La stampa del file può essere annullata impostando la variabile "Cancel" su True.
Questo evento si verifica immediatamente dopo il salvataggio della cartella di lavoro:
Private Sub Workbook_AfterSave(ByVal Success As Boolean) End Sub
Questo evento si verifica ogni volta che si passa da un foglio di lavoro all'altro in una cartella di lavoro:
Private Sub Workbook_SheetActivate(ByVal Sh As Object) End Sub
In questo esempio, il nome del foglio attivo viene visualizzato nella finestra di dialogo:
Private Sub Workbook_SheetActivate(ByVal Sh As Object) MsgBox "Name of Sheet : " & Sh.Name End Sub
Questo evento si verifica quando si fa doppio clic su una cella del foglio di lavoro:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) End Sub
Ad esempio, possiamo utilizzare questo evento per aggiungere un colore di riempimento a una cella, a seconda del foglio selezionato:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) If Sh.Name = "Sheet1" Then Target.Interior.Color = RGB(255, 108, 0) 'Arancia Else Target.Interior.Color = RGB(136, 255, 0) 'Verde End If End Sub
Questo evento si verifica prima del clic con il pulsante destro del mouse:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) End Sub
Questo evento si verifica ogni volta che cambia il contenuto del foglio di lavoro:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) End Sub
Questo evento si verifica ogni volta che i dati in un foglio di lavoro vengono calcolati o ricalcolati:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) End Sub
Questo evento si verifica ogni volta che cambia il contenuto dell'intervallo di celle selezionato nel foglio di calcolo:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) End Sub
In questo esempio, il colore di riempimento cambia se la cella A1 è vuota:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Range("A1") = "" Then Target.Interior.Color = RGB(124, 255, 255) 'Blu End If End Sub
Questo evento si verifica ogni volta che un nuovo foglio viene aggiunto alla cartella di lavoro:
Private Sub Workbook_NewSheet(ByVal Sh As Object) End Sub
Questo evento si verifica quando viene cliccato un collegamento (ipertesto):
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) End Sub