Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

di il
7 risposte

Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

Salve a tutti,

Lo scopo è quello di determinare se esistono righe valide da eliminare in una tabella

  • ActiveSheet.ListObjects(MyTable).DataBodyRange.Rows.Count
    • restituisce il numero delle righe Dati escludendo dal conteggio le righe di intestazione e dei totali

Problema :

  • Quando la tabella non contiene righe, .ListObjects(MyTable).DataBodyRange.Rows.Count restituisce errore impostazione Variabile Oggetto o Blocco With.
  • Solo con On Error Resume Next si riesce ad intercettare l'errore

Domanda :

Non vi è un altro sistema per Validare ListObjects(MyTable).DataBodyRange.Rows.Count ?


Esempio :

' delete rows
On Error Resume Next
If ActiveSheet.ListObjects(MyTbl).DataBodyRange.Rows.Count > 0 Then
   ActiveSheet.ListObjects(MyTbl).DataBodyRange.Delete
End If
On Error GoTo 0

Nel caso in cui la tabella non contiene righe:

Err.Error “91”, Err.Description “Variabile oggetto o variabile del blocco With non impostata”


Possibile che si possa intercettare l'errore solo con On Error ?
Grazie

7 Risposte

  • Re: Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

    Prova con

    If Not ActiveSheet.ListObjects(MyTbl).DataBodyRange Is Nothing Then
       ActiveSheet.ListObjects(MyTbl).DataBodyRange.Delete
    End If
  • Re: Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

    05/06/2023 - Sgrubak ha scritto:


    Prova con

    If Not ActiveSheet.ListObjects(MyTbl).DataBodyRange Is Nothing Then
       ActiveSheet.ListObjects(MyTbl).DataBodyRange.Delete
    End If

    Solito errore 91..  etc…

    Ho provato con Is Null , Is Object, Is Numeric, etc… ho provato a dichiarare una variabile ListObjects e ad assegnare ad essa il DataBody Range

    Insomma, ho provato un po' tutto quello che conosco , ma niente da fare 
    E se proprio non c'è metodo allora tanto vale che semplifico in questo modo, tolgo il controllo e vado direttamente al metodo Delete
    ….ma non mi piace buttare la palla in tribuna ;)

    ' delete rows
    On Error Resume Next
    ActiveSheet.ListObjects(MyTable).DataBodyRange.Delete
    On Error GoTo 0

    Il fatto che mi da fastidio e non sapere, tranne che per la descrizione del messaggio 91 ritornato, come mai un metodo di questo tipo non possa essere validato. 

    L'unica cosa che deduco è che ad innescare l'errore non è il .ListObjects(MyTable) ma esclusivamente il .DataBodyRange  :(

  • Re: Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

    Altra prova

    If Not ActiveSheet Is Nothing Then    
        If Not ActiveSheet.ListObjects(MyTbl) Is Nothing Then
            If Not ActiveSheet.ListObjects(MyTbl).DataBodyRange Is Nothing Then
               ActiveSheet.ListObjects(MyTbl).DataBodyRange.Delete
               MsgBox "Tabella cancellata"
            Else
               MsgBox "Nessun corpo tabella"
            End If
        Else
            MsgBox "Nessuna tabella"
        End If
    Else
        MsgBox "Nessun foglio attivo"
    End If
  • Re: Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

    05/06/2023 - Sgrubak ha scritto:


    Altra prova

    Perfetto… giustamente è da validare, prima di ricavarne le proprietà. proprio l'oggetto DataBodyRange

    Pertanto modifico il codice semplicemente in questo modo:

    ' delete rows
    If Not ActiveSheet.ListObjects(MyTable).DataBodyRange Is Nothing Then ActiveSheet.ListObjects(MyTable).DataBodyRange.Delete

    Non verifico gli altri due oggetti in quanto sono proprio loro a far scaturire l'eventi di cancellazione della DataBody e pertanto esistono.

    Ora va bene …. mannaggia era proprio sotto il naso il metodo corretto… 
    Grazie mille!!!!

    …prometto che non lo faccio più  ;)))  

  • Re: Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

    Ma è lo stesso codice che ho proposto il primo tentativo o sbaglio?

    Non dicevi che dava comunque errore? Per quello sono andato a controllare tutti e tre gli oggetti.

  • Re: Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

    05/06/2023 - Sgrubak ha scritto:


    Ma è lo stesso codice che ho proposto il primo tentativo o sbaglio?

    Non dicevi che dava comunque errore? Per quello sono andato a controllare tutti e tre gli oggetti.

    Ops… hai perfettamente ragione … nel test che ho fatto è evidente che ho scritto male il nome della tabella al posto di MyTable. 

    Imperdonabile!

    Ovviamente a quel punto hai pensato che ci fossero problemi negli oggetti precedenti e ti ho fatto perdere tempo. Scusa per la mia distrazione. 
    Grazie mille di avermelo fatto notare!

  • Re: Validate ListObjects().DataBodyRange.Rows.Count [RISOLTO]

    05/06/2023 - By65Franco ha scritto:


    Ovviamente a quel punto hai pensato che ci fossero problemi negli oggetti precedenti

    Esatto.

    05/06/2023 - By65Franco ha scritto:


    Scusa per la mia distrazione. 

    Ma va la! Capita. Anche io ogni tanto prendo lucciole per lanterne. XD

Devi accedere o registrarti per scrivere nel forum
7 risposte