Riley ha un foglio di lavoro con cui deve lavorare ogni venerdì. Questo foglio di lavoro è basato su un modello e ci sono almeno cinque celle che deve compilare, nell’intervallo C4: C8. Quando inizia con il foglio di lavoro, queste celle sono vuote. Riley si chiede se esiste un modo per impedire che il foglio di lavoro venga salvato e / o chiuso fino a quando non riempie tutte e cinque queste celle.

C’è un modo per farlo, ma implica l’uso di macro. Excel supporta il concetto di gestori di eventi, il che significa che è possibile sviluppare macro che vengono eseguite, automaticamente, quando si verificano determinati eventi. Due eventi per i quali è possibile creare gestori di eventi speciali sono BeforeClose (ovvero prima della chiusura della cartella di lavoro) e BeforeSave (prima del salvataggio della cartella di lavoro).

Come esempio di come potrebbe funzionare, supponiamo che il foglio di lavoro contenente l’intervallo da controllare (C4: C8) sia denominato “MyData”. Potresti aggiungere questo codice al modulo ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim rng As Range     Dim iCount As Integer     Dim sTemp As String

Set rng = Worksheets("MyData").Range("C4:C8")

iCount = Application.WorksheetFunction.CountBlank(rng)

If iCount <> 0 Then         sTemp = rng.Address & " has blank cells. " & vbCrLf         sTemp = sTemp & "The workbook will not be closed."

MsgBox sTemp         Cancel = True     End If End Sub

Si noti che la macro si basa sulla funzione del foglio di lavoro CountBlank per determinare se sono presenti spazi vuoti nell’intervallo di celle. Se rileva eventuali cekks vuoti (iCount è maggiore di 0), la macro visualizza un messaggio all’utente e la variabile Annulla è impostata su True, il che effettivamente arresta la chiusura della cartella di lavoro.

Puoi usare una macro simile per l’evento BeforeSave, in questo modo:

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

Dim rng As Range     Dim iCount As Integer     Dim sTemp As String

Set rng = Worksheets("MyData").Range("C4:C8")

iCount = Application.WorksheetFunction.CountBlank(rng)

If iCount <> 0 Then         sTemp = rng.Address & " has blank cells. " & vbCrLf         sTemp = sTemp & "The workbook will not be saved."

MsgBox sTemp         Cancel = True     End If End Sub

Se vuoi assicurarti che la routine abbia selezionato le celle in cui è necessario l’input (come passaggio finale), potresti aggiungere la seguente riga a entrambe le macro, subito dopo la riga che imposta la variabile Cancel su True:

rng.Select

Ricorda, inoltre, che poiché la tua cartella di lavoro è basata su un modello, dovrà essere salvata come modello abilitato per le macro per funzionare correttamente.

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

Questo suggerimento (4364) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.