Risultati da 1 a 11 di 11

Discussione: Strumento Tabella e VBA



  1. #1

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6747
    Versione Office
    2013
    Likes ricevuti
    711
    Likes dati
    162

    Strumento Tabella e VBA

    Ciao a tutti.

    Premetto di conoscere poco o nulla dello strumento Tabella ma noto un comportamento strano del VBA quando c'è lo strumento Tabella.

    Nel file allegato ho sul Foglio1 una tabella "semplice" e sul Foglio2 una con struttura Tabella; le due tabelle sono apparentemente identiche.

    Ho poi queste due macro che credo sia inutile spiegare

    Codice: 
    Sub prova1()
    Dim ur As Long
    ur = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
    MsgBox ur
    End Sub
    
    Sub prova2()
    Dim ur As Long
    ur = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row
    MsgBox ur
    End Sub
    Mi sapete dire perché nel primo caso la variabile ur assume valore 1 e nel secondo 7 essendo le due tabelle (apparentemente) identiche?

    Grazie
    File Allegati File Allegati
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  2. #2
    L'avatar di GiuseppeMN
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Mantova
    Messaggi
    864
    Versione Office
    2000 - 2013
    Likes ricevuti
    285
    Likes dati
    160

    Re: Strumento Tabella e VBA

    Buona giornata, Alfredo.

    Credo faccia parte della struttura della Tabella.

    Potresti provare con:
    Codice: 
    Sub prova3()
    Dim ur As Long
        ur = 1
        Do While Worksheets("Foglio2").Cells(ur, 1) <> ""
            ur = ur + 1
        Loop
            ur = ur - 1
        MsgBox ur
    End Sub

    A disposizione.

    Buona serata.

    Giuseppe
    Windows XP Excel 2000 - Windows 10 Excel 2013

  3. #3

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6747
    Versione Office
    2013
    Likes ricevuti
    711
    Likes dati
    162

    Re: Strumento Tabella e VBA

    Si Giuseppe e grazie.

    Però è uno strano modo di comportarsi del VBA perché considera piene celle che non lo sono.

    Capisco che c'è di mezzo la struttura tabella ma questa è una cosa elementare.

    Io, per quanto possibile, quando uso VBA cerco di evitare le tabelle quanto le celle unite

    Saluti alla Signora ed un abbraccio a Te.
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  4. #4

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    364
    Likes dati
    0

    Re: Strumento Tabella e VBA

    Ciao,

    semplicemente nel Foglio1 non hai nulla (a parte la prima riga), nel Foglio2 c'è un oggetto ListObject ("Tabella1") la cui proprietà Range sono le celle A1:F7:

    Codice: 
    Sub prova3()
      Dim ur As Long
      Dim ws As Worksheet
      Dim oTab As ListObject
      
      Set ws = Worksheets("Foglio2")
      Debug.Print ws.ListObjects.Count
      Set oTab = ws.ListObjects("Tabella1")
      
      Debug.Print oTab.Range.Address
      
      Set ws = Nothing
      Set oTab = Nothing
    End Sub
    Quindi l'ultima riga in questo caso corrisponde all'ultima riga occupata dalla Tabella.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  5. #5

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6747
    Versione Office
    2013
    Likes ricevuti
    711
    Likes dati
    162

    Re: Strumento Tabella e VBA

    Infatti se su una tabella premo End e Freccia giù non vado all'ultima cella del foglio (come succederebbe se non vi fosse la tabella) ma va all'ultima riga della tabella seppur vuota.
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  6. #6

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6747
    Versione Office
    2013
    Likes ricevuti
    711
    Likes dati
    162

    Re: Strumento Tabella e VBA

    E dopo la spiegazione di Marco (che ringrazio) rifuggirò ancor di più dalle tabelle quando uso il VBA

    Ma quindi se si volesse determinare l'ultima cella piena di una colonna di una tabella come si fare usare visto che non si può usare la classica istruzione

    Codice: 
    Cells(Rows.Count, 1).End(xlUp).Row
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  7. #7

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    364
    Likes dati
    0

    Re: Strumento Tabella e VBA

    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    Però è uno strano modo di comportarsi del VBA perché considera piene celle che non lo sono.

    Non è VBA che si comporta "strano", sei tu (siamo noi) che, per identificare l'ultima riga, utilizzi un metodo non adeguato al contesto.

    Io, nei miei lavori seri, uso il metodo Find:

    Codice: 
    Sub prova3()
      Dim ur As Long
      Dim ws As Worksheet
      Dim oTab As ListObject
      
      Set ws = Worksheets("Foglio2")
      Debug.Print ws.ListObjects.Count
      Set oTab = ws.ListObjects("Tabella1")
      
      Debug.Print oTab.Range.Address
      On Error Resume Next
      ur = ws.Cells.Find(what:="*", _
              After:=ws.Cells(1), _
              LookAt:=xlPart, _
              LookIn:=xlFormulas, _
              SearchOrder:=xlByRows, _
              SearchDirection:=xlPrevious, _
              MatchCase:=False).Row
      On Error GoTo 0
      MsgBox ur
      Set ws = Nothing
      Set oTab = Nothing
    
    End Sub
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  8. #8

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    64
    Messaggi
    6747
    Versione Office
    2013
    Likes ricevuti
    711
    Likes dati
    162

    Re: Strumento Tabella e VBA

    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Non è VBA che si comporta "strano", sei tu che, per identificare l'ultima riga, utilizzi un metodo non adeguato al contesto.
    E su questo non c'erano dubbi.

    Grazie ancora.
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  9. #9

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    364
    Likes dati
    0

    Re: Strumento Tabella e VBA

    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    E su questo non c'erano dubbi.
    Dai, avevo ricompreso anche me

    Comunque, essendo più semplice (una sola istruzione) è sicuramente il metodo più diffuso, basta sapere quando potrebbe essere inaffidabile.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  10. #10

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    364
    Likes dati
    0

    Re: Strumento Tabella e VBA

    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    Ma quindi se si volesse determinare l'ultima cella piena di una colonna di una tabella come si fare usare visto che non si può usare la classica istruzione
    Codice: 
    Cells(Rows.Count, 1).End(xlUp).Row
    Potresti applicare un'altra volta il metodo .End(xlUp)
    Codice: 
      ur = Worksheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).End(xlUp).Row
    però se la tabella è piena fallisce.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  11. #11
    L'avatar di dracoscrigno
    Clicca e Apri
    Data Registrazione
    May 2016
    Località
    ferrara
    Età
    41
    Messaggi
    2074
    Versione Office
    office pro 2010
    Likes ricevuti
    440
    Likes dati
    241

    Re: Strumento Tabella e VBA

    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    ... Ma quindi se si volesse determinare l'ultima cella piena di una colonna di una tabella come si fare usare visto che non si può usare la classica istruzione

    Codice: 
    Cells(Rows.Count, 1).End(xlUp).Row

    Tralasciando il fatto che in una tabella, almeno una colonna dovrebbe essere sempre piena e quindi il suo ultimo record si troverebbe:
    Codice: 
    Sub Macro1()
        With Foglio1.Range("Tabella1")
            .Cells(.Rows.Count, 1).Select
        End With
    End Sub
    ed aggiungendo un ofset sul record si va a scrivere immediatamente sotto facendo aumentare, in automatico, la tabella di un ulteriore record.

    Per trovare la prima cella vuota, dal basso, come si farebbe dentro un foglio basta utilizzare, come riferimento, NON il foglio, ma la tabella:

    Codice: 
    Sub Macro1()
        With Foglio1.Range("Tabella1")
            .Cells(.Rows.Count, 1).End(xlUp).Select
        End With
    End Sub
    ... Poi va sottolineato che un conto è l' oggetto Tabella1:
    Codice: 
        Foglio1.ListObjects("Tabella1").Range.Select
    ed un conto è il nome all' oggetto tabella associato

    Codice: 
     Foglio1.Range("Tabella1").Select
    Nel primo caso abbiamo un range che tiene conto di tutto l' oggetto, intestazioni comprese, nel secondo caso, quello più interessante per i soliti utilizi, è il range che delimita i nostri dati.

    Tra le varie semplificazioni nell' utilizzare una tabella è anche il potersi riferire ad un suo campo attraverso il nome del campo stesso

    Codice: 
    Foglio1.Range("Tabella1[Colonna1]").Cells(2).select

Discussioni Simili

  1. Excel 2003 e EP6 Lo strumento TABELLA per intervalli dinamici di excel
    Di AiaceT nel forum Domande su Excel in generale
    Risposte: 0
    Ultimo Messaggio: 23/01/17, 00:06
  2. Ricerca in tabella e creazione nuova tabella con i dati ricavati
    Di LucaUfficio nel forum Domande su Excel in generale
    Risposte: 10
    Ultimo Messaggio: 18/12/16, 19:52
  3. Inserito nuovo strumento [RISOLTO]
    Di Gerardo Zuccalà nel forum Problemi, suggerimenti e Novità del forum
    Risposte: 5
    Ultimo Messaggio: 19/09/16, 18:56
  4. [Risolto] Estrarre un testo da una stringa di una tabella tramite query, e poi creare una nuova tabella
    Di ProgrammD69 nel forum Domande su Microsoft Access
    Risposte: 11
    Ultimo Messaggio: 05/09/16, 10:21
  5. Notifiche Immediate & strumento "Post unito in automatico"...
    Di cromagno nel forum Problemi, suggerimenti e Novità del forum
    Risposte: 18
    Ultimo Messaggio: 02/08/16, 22:13

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •