MsgBox su ricerca con filtro

di freddy60 il
11 risposte

Buonasera, ho creato 12 pulsati activex , uno per ogni mese, vorrei che quando clicco sul pulsante ad esempio Agosto e non ci sono record registrati , vorrei che comparisse un msbox con la scritta " nesun record trovato, invece di una pagina vuota.

Private Sub Agosto_Click()
ActiveSheet.UnProtect
    Range("I2") = ("Foglio non protetto")
Range("A5").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$J$365").AutoFilter field:=1, Criteria1:=28, _
        Operator:=11, Criteria2:=0, SubField:=0
End Sub

Questo è la macro che filtra sul pulante di agosto

Grazie a chi mi darà una mano.

11 Risposte

  • Prova aggiungendo la riga

    MsgBox ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows.Count

    e da questa deduci cosa fare

  • HO fatto come dici tu mi compare un msgbox con il numero uno e il titolo microsoft excel.

    che devo fare ora perchè mi compaia il msgbox con la scritta “ nessun record trovato”

  • E quante righe visualizzi? Fai delle prove e comprendi cosa è questo numero.   

  • Ciao,

    devi testare il valore restituito e sulla base di tale valore imposti il messaggio

    If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then MsgBox "Nessun record trovato.", vbInformation, "Info"
    

    Se restituisce 1 vuol dire che nella Colonna che hai Filtrato, oltre alla prima riga di intestazione dove hai posto i filtri, non ci sono altre righe visibili e pertanto il filtro non ha prodotto nessun risultato.

  • In base alla dritta freddy dovrebbe arrivarci da solo, altrimenti lui come partecipa alla discussione? Sa che non sono ammesse richieste di pappa pronta…

  • 13/07/2023 - oregon ha scritto:


    Prova aggiungendo la riga

    MsgBox ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows.Count

    e da questa deduci cosa fare

    Ciao Oregon, questa mi restituisce sempre 1 …. è possibile oppure ho qualche problema nel mio excel ? 

  • 14/07/2023 - oregon ha scritto:


    In base alla dritta freddy dovrebbe arrivarci da solo, altrimenti lui come partecipa alla discussione? Sa che non sono ammesse richieste di pappa pronta…

    Giusto !!!  ;-)

  • 14/07/2023 - Sgrubak ha scritto:


    È corretto. Conta l'header, che sarà sempre visibile.

    Ciao,

    mi sono spiegato male… volevo dire, sia che non ci siano righe filtrate oppure ci siano, mi restituisce sempre e comunque 1 

    quindi anche se sono visibili oltre l'intestazione, altre righe mi ritorna sempre 1

    MsgBox ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows.Count

     Mentre con questa

    ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count

    mi restituisce il conteggio coretto sia che il filtro abbia trovato corrispondenze oppure no
    (è limitata come funzione in quanto esegue il conteggio solo su una colonna, in questo caso quella dove viene applicato il filtro)


    Perchè si comporta così?


    Pertanto mi chiedevo se dipendeva dal mio excel (Office 2013)

  • 14/07/2023 - By65Franco ha scritto:


    sia che non ci siano righe filtrate oppure ci siano, mi restituisce sempre e comunque 1 

    Mmm… Anche a me, su Excel 365 Beta. Non ci avevo fatto caso.

    Quel che ho notato è che sembra funzionare bene su un foglio normale, mentre se c'è una tabella riporta sempre 1.

    Ti corrisponde?

  • 14/07/2023 - Sgrubak ha scritto:


    Mmm… Anche a me, su Excel 365 Beta. Non ci avevo fatto caso.

    Quel che ho notato è che sembra funzionare bene su un foglio normale, mentre se c'è una tabella riporta sempre 1.

    Ti corrisponde?

    Su tabella è un pò diverso…

    Poniamo di avere Tabella1 e filtrando la prima colonna per valori > 55 non trova nessuna corrispondenza:

    ActiveSheet.ListObjects("Tabella1").Range.AutoFilter Field:=1, Criteria1:=">55"
    
    If ActiveSheet.ListObjects("Tabella1").Range.Columns(1).SpecialCells(xlCellTypeVisible).CountLarge = 1 Then MsgBox "Nessun record trovato.", vbInformation, "Info"

    Quindi in questo caso se si contano le celle di colonna 1, la funzione ritorna 1 … cioè conteggia solo la testata della tabella.
    se vuoi testarla non mettere la tabella a partire da A1… magari posizionala qualche riga sotto ;-) 


    Alla fine è lo stesso concetto di questa applicata al foglio di lavoro e ovviamente non fa riferimento all'oggetto Tabella:

    If ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then MsgBox "Nessun record trovato.", vbInformation, "Info"

    Giusto ?

Devi accedere o registrarti per scrivere nel forum
11 risposte