Excel e gli applicativi Microsoft Office Range(Selection, Selection.End(xlDown)).Select non funziona correttamente

Login Registrati
Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
  • Autore
    Articoli
  • #39303 Score: 0 | Risposta

    DeletedUser
    Bloccato
      13 pts

      Ciao a tutti, io voglio selezionare e poi cancellare un prospetto o meglio le colonne C e D. Il secondo rigo del codice che vedete dovrebbe selezionare tutte le righe "piene", quindi nel mio caso si dovrebbe fermare alla riga 40 essendo 40 le righe piene. A volte fa esattamente cosi, altre volte seleziona le due colonne dalla riga 10 fino alla riga 1048576 ovvero fino alla fine, cancellandomi alcuni appunti che sotto le 40 righe. Perchè? Vi è una soluzione più sicura che selezioni solo le righe piene? Occhio non ditemi di selezione io le righe fino a 40 perchè queste righe a volte sono 40 a volte 41 etc. Grazie.

      Range("C10:D10").Select
      Range(Selection, Selection.End(xlDown)).Select
      Selection.ClearContents

      #39307 Score: 0 | Risposta

      albatros54
      Moderatore
        89 pts

        prova cosi:

        Foglio1.Range("c10").CurrentRegion.Clear

        del foglio1

         

         

         

        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #39308 Score: 0 | Risposta

        DeletedUser
        Bloccato
          13 pts

          albatros54 grazie per la risposta ma quel comando mi cancella TUTTO IL FOGLIO, tutte le colonne. Azzera tutto.

          #39315 Score: 0 | Risposta

          albatros54
          Moderatore
            89 pts

            spiega meglio lo scenario

             

            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
            Sempre il mare, uomo libero, amerai!
            ( Charles Baudelaire )
            #39316 Score: 0 | Risposta

            DeletedUser
            Bloccato
              13 pts

              Scusami ma cosa c'è da spiegare, il tuo codice cancella tutto il foglio dalla riga 10 in giù. Il mio codice postato su dovrebbe selezionare le colonne C e  D dalla riga 10 fino all'ultima riga piena.  E lo fa, lo fa spesso. Però a volte anzichè fermarsi all'ultima riga piena seleziona le due colonne fino in fondo all'ultima riga di excel. Questo mi crea problemi perchè sotto il foglio io scrivo degli appunti e quando succede (diciamo 1 volta su 4) mi cancella tutto. Io sto facendo l'esempio con le colonne C e D ma in realtà sono una decina le colonne che devo cancellare. Ed il problema si verifica su tutte le colonne per questo i miei appunti spariscono.

              #39319 Score: 0 | Risposta

              DeletedUser
              Bloccato
                13 pts

                La soluzione c'è.... basta fargli contare le righe presenti e  fargli selezionare e cancellare dalla riga 10 alla riga X (il numero di righe presenti + 10 -1). Ma è una soluzione bruttina... non capisco perchè l'istruzione:

                Range(Selection, Selection.End(xlDown)).Select non funzioni correttamente.

                #39320 Score: 0 | Risposta

                albatros54
                Moderatore
                  89 pts

                  prova cosi:

                  trova l'ultima riga della colonna C che contiene un dato cosi

                  finalrow = Cells(Rows.Count, 3).End(xlUp).Row

                  Range("C10:D" & finalrow).Select

                   

                   

                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                  Sempre il mare, uomo libero, amerai!
                  ( Charles Baudelaire )
                  #39321 Score: 0 | Risposta

                  GiuseppeMN
                  Partecipante
                    19 pts

                    Buon pomeriggio a Tutti.

                    Buon pomeriggio M.Polo;
                    hai provato a:
                    1) Selezionare le Colonne "C" e "D"
                    2) Funzione "F5"
                    3) Speciale
                    4) Selezionare Costanti o Formule (dipende dal contenuto delle Celle)
                    5) Togliere il segno di "Spunta" (Flag) da eventuali voci che non vuoi selezionare
                    6) OK
                    7) Comando "Cancella"

                    A disposizione.

                    Buon fine settimana a Tutti

                    Giuseppe

                    #39322 Score: 0 | Risposta

                    DeletedUser
                    Bloccato
                      13 pts

                      albatros54, è la stessa cosa che ho detto io nell'ultimo post... e certamente funziona perchè gli viene dato l'inizio e la fine delle righe da cancellare.  Ma è una soluzione bruttina. Detto che non capisco perchè Selection.End(xlDown) non funzioni correttamente, vorrei capire se esiste un'istruzione alternativa che funzioni.

                      #39323 Score: 0 | Risposta

                      DeletedUser
                      Bloccato
                        13 pts

                        Buon pomeriggio a te GiuseppeMN, ma tu stai parlando di excel non di vba. Oppure io non ho capito.

                        #39324 Score: 0 | Risposta

                        GiuseppeMN
                        Partecipante
                          19 pts

                          Sto parlando di Excel senza disturbare VBA.

                          Se è essenziale utilizzare VBA potresti provare con:

                          Option Explicit

                          Application.ScreenUpdating = False

                          Sub Cancella_CD()
                          Columns("C:D").Select
                          Selection.SpecialCells(xlCellTypeConstants, 23).Select
                          Selection.ClearContents
                          Range("C1").Select

                          Application.ScreenUpdating = True
                          End Sub

                           Credo che l'unico problema sia che, in questo modo, si cancellano anche eventuali "Intestazioni"; quindi dovresti utilizzare una o due Variabili nelle quali salvare temporaneamente il Valore delle intestazioni e da utilizzare, alla fine del Ciclo per ripristinare le "Intestazioni".

                          Giuseppe

                          Ho appena corretto il Codice VBA aggiungendo le istruzioni "Application.ScreenUpdating"

                          #39325 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            272 pts

                            M.Paolo ha scritto:
                            Range("C10:D10").Select
                            Range(Selection, Selection.End(xlDown)).Select
                            Selection.ClearContents

                            non capisco perchè l'istruzione:
                            Range(Selection, Selection.End(xlDown)).Select non funzioni correttamente.

                            Le tre istruzioni selezionano le due celle C10 e D10 mantenendo la cella attiva su C10. Poi la selezione viene estesa da C10 in giù fino alla prima cella occupata (anche da una eventuale formula, e pure se questa dà risultato vuoto). Se da C10 in giù non c'è niente, viene raggiunta la fine del foglio.

                            La soluzione che vede qual è l'ultima riga non è "bruttina", cosa vuol dire poi?, solo che non è l'unica (l'esempio di Giuseppe lo dimostra). E' una soluzione perfettamente valida e funzionante come le altre.

                            Prova anche questa, se vuoi.

                            range(Range("C10:D10"),Cells(Rows.Count, 3).End(xlUp)).ClearContents
                            #39326 Score: 0 | Risposta

                            DeletedUser
                            Bloccato
                              13 pts

                              Non sono d'accordo la selezione C10 e D10 è l'inizio delle righe da cancellare, Range(Selection, Selection.End(xlDown)) dovrebbe selezionare da C10 e D10 fino all'ultima riga "piena" non fino alla prima (sarà un tuo errore di battitura) che siano formule o dati. Cosa che fa quasi sempre, ogni tanto però anzichè fermarsi alle righe piene va giù fino all'ultima riga di excel. Perchè il 90% delle volte funziona ed il 10% delle volte va fino in fondo? E' questo che non capisco, poi di soluzione come abbiamo detto un pò tutti c'è ne sono tante.

                              #39327 Score: 0 | Risposta

                              DeletedUser
                              Bloccato
                                13 pts

                                range(Range("C10:D10"),Cells(Rows.Count, 3).End(xlUp)).ClearContents

                                Questa formula cancella oltre il numero di righe piene esattamente come la mia.

                                 

                                #39328 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  272 pts

                                  M.Paolo ha scritto:

                                  Non sono d'accordo

                                  Su cosa non concordi? Che quando selezioni C10 e D10 la cella C10 è quella attiva? prova.

                                  Poi, è sempre dalla cella attiva che Excel estende la selezione. Con il codice che hai mostrato la selezione si ferma alla prima cella non vuota che incontra in colonna C, dopo la cella C10. Non ho fatto errori di battitura 🙂

                                  M.Paolo ha scritto:

                                  dovrebbe selezionare da C10 e D10 fino all'ultima riga "piena"

                                  Ecco, il pezzo di codice che ho mostrato fa questo.

                                  #39329 Score: 0 | Risposta

                                  vecchio frac
                                  Senior Moderator
                                    272 pts

                                    M.Paolo ha scritto:

                                    Questa formula cancella oltre il numero di righe piene esattamente come la mia.

                                    Sì, se in colonna C non ci sono altri dati oltre C10.

                                    Allega il file altrimenti non ne usciamo vivi 🙂

                                    #39330 Score: 0 | Risposta

                                    DeletedUser
                                    Bloccato
                                      13 pts

                                      vecchio frac ho scritto non sono d'accordo perchè hai scritto che da c10 si va giù fino alla PRIMA cella occupata, Si va fino all'ULTIMA cella occupata. Sul resto ovviamente concordo. Utilizzerò quella che io ho definito soluzione bruttina, è la più sicura e la meno soggetta ad errori. Mi rimane il dubbio che lasciando inalterate le colonne la soluzione Range(Selection, Selection.End(xlDown)).Select che dovrebbe essere quella più corretta, a volte non funziona. Eppure non cambio una virgola. Provo 5-6-7 -8 volte e prima o poi va giù fino a fine foglio. Ribadisco utilizzerò la formula "bruttina" come io l'ho definita. Grazie a tutti per gli interventi. Se qualcuno sa spiegarmi perchè la formula corretta a volte non va gliene sarei grato, altrimenti per me si può chiudere qui. Grazie di nuovo a tutti.

                                      #39333 Score: 0 | Risposta

                                      GiuseppeMN
                                      Partecipante
                                        19 pts

                                        Buona sera a Tutti.
                                        Ordunque, mi ero fermato sulla richiesta in #39303:

                                        ... voglio selezionare e poi cancellare un prospetto o meglio le colonne C e D ...

                                        Poi qualifiche F1 e quindi stop.
                                        Mi sembra che la richiesta iniziale sia stata modificata in:

                                        ... la selezione C10 e D10 è l'inizio delle righe da cancellare ...

                                        A questo punto proverei con:
                                        Option Explicit

                                        Sub Cancella_pg()
                                        Application.ScreenUpdating = False
                                        Dim NRc As Long
                                        Dim Max As Integer

                                        NRc = Cells(Rows.Count, "C").End(xlUp).Row
                                        Max = NRc
                                        NRc = Cells(Rows.Count, "D").End(xlUp).Row
                                        If NRc > Max Then Max = NRc
                                        Range(Cells(10, 3), Cells(Max, 4)).ClearContents

                                        Application.ScreenUpdating = True
                                        Cells(2, 3).Select
                                        End Sub

                                        A disposizione.

                                        Buona serata a Tutti.

                                        Buon fine settimana a Tutti.

                                        Giuseppe

                                        #39334 Score: 0 | Risposta

                                        DeletedUser
                                        Bloccato
                                          13 pts

                                          Ma si GiuseppeMN di soluzioni c'è ne sono tante, ma quella mia iniziale risolve tutto con un rigo (in teoria), poi però funziona a fasi alterne. Ripeto il foglio è pieno non ci sono celle vuote. Io non modifico niente. Provo varie volte e dopo un certo numero di prove ecco che anziche selezionare fino alla fine delle righe piene (come deve fare), seleziona le colonne fino alla fine del foglio ovvero fino alla riga 1048576. Perchè? E' questo che non capisco.  Voi mi avete proposto tante soluzioni ma io la soluzione l'avevo già ed anche più di una, ma non capivo e non capisco perchè questa istruzione ogni tanto da i numeri. L'unica è che ci sia un bug su quella istruzione. Ringrazio te GiuseppeMN e tutti gli altri intervenuti. Saluti.

                                          #39336 Score: 0 | Risposta

                                          vecchio frac
                                          Senior Moderator
                                            272 pts

                                            M.Paolo ha scritto:

                                            Perchè? E' questo che non capisco

                                            Sicuramente perché in colonna C non ci sono altri dati dopo C10. Siccome la cella attiva rimane su C10, è su questa colonna che agisce il comando di estensione della selezione partendo dal fondo del foglio fino alla prima cella occupata.

                                            L'ultima soluzione di Giuseppe, che ha centrato il punto, può essere resa più compatta così:

                                                i = Cells(Rows.Count, 3).End(xlUp).Row
                                                j = Cells(Rows.Count, 4).End(xlUp).Row
                                                i = -((i > j) * i + (i < j) * j)
                                                Range(Range("C10"), Cells(i, "D")).Select   'ClearContents
                                            

                                            Questo seleziona (o cancella, metti l'istruzione che vuoi) l'intervallo tra C10:D10 fino a Cn:Dn dove n è la riga compilata di C o D, quella maggiore (non ho usato Application.Max volutamente altrimenti l'ambaradan booleano per calcolare i era più semplice).

                                            #39337 Score: 1 | Risposta

                                            DeletedUser
                                            Bloccato
                                              13 pts

                                              Buongiorno a tutti, lasciate stare la notte porta consiglio. L'istruzione è corretta, ho sbagliato io nelle priorità del codice. Esiste nel codice (è molto lungo ed a volte mi ci perdo), un imput che chiede che tipo di tabellone vuoi creare, se inserisci una lettera sbagliata ti avverte dell'errore ed esce dalla routine. Peccato che io l'abbia messo per sbaglio un rigo dopo la cancellazione delle prime due colonne. Quindi quando sbagliavo per provare di fatto C e D venivano cancellate, mentre il resto delle colonne da cancellare restava intatto ed io non mi accorgevo di nulla. Sono colonne strette non mi accorgevo che le aveva cancellate, quindi al successivo comando essendo vuota la colonna C ed essendo come dice il saggio vecchio frac la casella su cui agisce il comando di estensione ecco che finiva in fondo al foglio e cancellava i miei appunti. E' bastato invertire le due righe sopra/sotto ed il problema non esiste più. Non era l'istruzione a non funzionare ma la mia vista ed il mio codice. Chiedo scusa a tutti se vi ho fatto perdere tempo, però abbiamo o almeno ho imparato qualche formula nuova. Vi prego scusatemi e buona domenica a tutti.

                                              #39338 Score: 0 | Risposta

                                              vecchio frac
                                              Senior Moderator
                                                272 pts

                                                Grazie del feedback. Non è mai una perdita di tempo quando ci si sforza di capire come vanno le cose   

                                              Login Registrati
                                              Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
                                              Rispondi a: Range(Selection, Selection.End(xlDown)).Select non funziona correttamente
                                              Gli allegati sono permessi solo ad utenti REGISTRATI
                                              Le tue informazioni: