
Originariamente inviato da
maui.maui
Posso sapere cosa e' che non va????? I risultati non vengono aggiornati mentre vengono sempre aggiornati se eseguo una formula qualunque, compresa quella =CONTA.VUOTE(A4:A8)
Dunque, ho fatto la tua prova (manca la dichiarazione della variabile System_Row_Title nel codice che hai postato) ed effettivamente la tua funzione personalizzata non viene ricalcolata. In effetti io non sapevo nemmeno la differenza tra F9 e Ctrl+Alt+F9.
Così, cercando un po' sul web ho trovato dapprima questo articolo, nel quale quasi per caso ho notato l'affermazione "Volatile functions are always calculated". Da lì sono giunto a quest'altro articolo che contiene la spiegazione, e nella quarta riga c'è la soluzione al tuo quesito.
Quindi il tuo codice modificato (testato e funzionante) da incollare in un modulo, è il seguente:
Option Explicit
Public Function Count_Empty_Cell()
Dim System_Row_Title As Long
' rende la funzione "volatile", venendo così sempre eseguita
Application.Volatile True
'System_Row_Title Rappresenta il numero di righe di sistema presenti in un foglio e quindi da sottrarre
'al numero di righe occupate.
System_Row_Title = 3
'nrow ncol sono il numero di righe e il numero di colonna che andra' poi a definire il range variabile
'in funzione del numero di celle occupate
'Last_Row e' la variabile indicante il numero di riga che rappresenta l'ultima cella occupata di un range
Dim nRow As Long, nCol As Long, Last_Row As Long
Dim A_Col_Busy__Cell As Range
Dim Content_Cell
Dim Count_Blanks_Cells
nRow = 1
nCol = 1
'End(xlUp).Row Da il valore dell'ultimo numero di riga occupata del range "B:B", Range("B65536")
Last_Row = Range("B65536").End(xlUp).Row
Last_Row = Last_Row - System_Row_Title
'definisce il range variabile in funzione dell'ultima cella occupata di un'altra colonna
Set A_Col_Busy__Cell = Range(Cells(nRow, nCol), Cells(nRow + Last_Row, nCol))
For Each Content_Cell In A_Col_Busy__Cell
'se il valore della cella e' uguale a "" valore vuoto
If Content_Cell.Value = "" Then
Count_Blanks_Cells = Count_Blanks_Cells + 1
End If
Next Content_Cell
'La riga che segue serve ad assegnare a questa funzione il valore finale del conto totale delle celle vuote
Count_Empty_Cell = Count_Blanks_Cells
'questa funzione Count_Empty_Cell che non richiede immissione di valori,
'verra' richiamata sul foglio excel inserendo =Count_Empty_Cell() all'interno di una qualunque cella
End Function
Le modifiche sono quelle in rosso, così potrai servirtene nelle future programmazioni. Per adesso sai che puoi anche utilizzare la semplice funzione CONTA.VUOTE che ti ho già segnalato.
Spero sia utile. Ciao.