Richiesta di input (Microsoft Excel)
Quando sviluppi un foglio di lavoro che verrà utilizzato da altre persone, potresti voler assicurarti che riempiano determinate celle prima che sia consentito loro di chiudere la cartella di lavoro. Non esiste una funzione incorporata in Excel per farlo, ma puoi creare una macro che effettuerà il controllo necessario e fermerà l’utente per procedere. Questa può essere una macro piuttosto semplice, legata all’evento BeforeClose.
L’evento BeforeClose viene attivato ogni volta che una cartella di lavoro viene chiusa con qualsiasi mezzo. Il trucco è l’impostazione della proprietà Annulla all’interno del gestore di eventi. L’impostazione di Annulla su True interromperà la chiusura della cartella di lavoro e lasciandola invariata, la cartella di lavoro si chiuderà normalmente.
Ad esempio, la seguente macro controlla se la cella A1 contiene qualcosa; in caso affermativo, la cartella di lavoro viene chiusa. In caso contrario, l’utente viene informato che manca qualcosa e la chiusura viene annullata.
Private Sub Workbook_BeforeClose(Cancel As Boolean) If Cells(1, 1).Value = "" Then MsgBox "Please fill cell A1" Cancel = True End If End Sub
Se lo si desidera, è possibile creare macro più elaborate. Ad esempio, potresti avere diverse celle diverse che devono essere controllate. La seguente versione controlla un intervallo denominato “Obbligatorio” per vedere se ogni cella dell’intervallo contiene qualcosa. Se una delle celle è vuota, la cartella di lavoro non può essere salvata o chiusa. (Questa macro viene attivata non solo durante l’evento BeforeClose, ma anche durante l’evento BeforeSave.)
Questi due gestori di eventi dovrebbero essere inseriti nel foglio dei codici per la cartella di lavoro:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Cancel = ForceDataEntry() End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ Cancel As Boolean) Cancel = ForceDataEntry() End Sub
Notare che i gestori di eventi chiamano la funzione ForceDataEntry. Questa funzione dovrebbe essere inserita in un normale modulo macro:
Function ForceDataEntry() As Boolean Dim rng As Range Dim c As Variant Dim rngCount As Integer Dim CellCount As Integer Set rng = Range("Mandatory") rngCount = rng.Count CellCount = 0 For Each c In rng If Len(c) > 0 Then CellCount = CellCount + 1 End If Next c ForceDataEntry = False If CellCount <> rngCount Then ForceDataEntry = True End Function
Si noti che qualsiasi implementazione che richiede macro (come questa) soffre di un potenziale problema: gli utenti possono decidere di non abilitare le macro quando viene caricata la cartella di lavoro. Se eseguono la cartella di lavoro con le macro disabilitate, saranno comunque in grado di salvare la cartella di lavoro senza tutte le celle obbligatorie contenenti valori.
_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 (9574) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: