Pulire foglio preservando i tasti



  • Pulire foglio preservando i tasti
    di Max (utente non iscritto) data: 30/08/2012 14:54:17

    Ciao a tutti,
    ho un problema con una macro:
    All'interno di un foglio excel ho 2 pulsanti. Il primo chiama una macro che attraverso dei valori da me inseriti, traccia delle linee orientate (AddLine...) e aggiunge una textbox con il risultato di un calcolo...fin qui nessun problema. Il secondo tasto deve ripulire l'intero foglio e formattarlo senza bordi. Voglio evitare istruzioni tipo "range("A1:X500").delete". Nella sub sotto ho riportato anche le "varianti" precedute con ('). Come attualmente sotto, pulisce e formatta il foglio ma non elimina nè le linee nè la textbox. Se utilizzo Cells.Delete anzichè Cells.Clear cancella tutto compreso i due bottoni (che invece voglio mantenere). Ho provato anche ad aggiungere questa istruzione trovata in rete (che non comprendo completamente) ma mi elimina le linee una alla volta ad ogni chiamata della macro e alla fine la text box.

    ActiveSheet.Shapes(ActiveSheet.Shapes(Lines).Name).Delete

    Forse potrei utilizzarla in un ciclo ma non so come "maneggiarla"

    Potete aiutarmi? Spero di essermi spiegato chiaramente.
    Grazie mille
     
    Sub ripdiag()
        Sheets("Foglio1").Select
    With Selection
        Cells.Clear
    '    Cells.Delete
    
    End With
    Sheets("Foglio1").Select
        Cells.Select
    With Selection.Interior
            .ColorIndex = 2
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
        End With
    End Sub



  • di Vecchio Frac data: 30/08/2012 16:11:36

    Secondo me quell'istruzione non fa niente di utile :)
    Per quanto riguarda il ciclare tra le forme e identificare una Linea, puoi utilizzare un ciclo simile a quello che ti allego.
    E' inoltre dispendioso (in termini di tempo ed efficienza) cancellare il foglio come fai tu, identifica le celle che vuoi ripulire e usa solo quel range:
    [a1:z100].Clear (questo cancella tutto, valori e formattazione)
     
    For Each shp In ActiveSheet.Shapes
         If shp.Type = msoLine Then shp.Delete
    Next






  • di HarryBosch data: 30/08/2012 16:12:53

    Ciao Max
    vuoi dirmi che un semplice codice (vedi sotto) non è sufficiente?
    se ti trovi già sul foglio da "pulire" e vuoi eliminare contenuti + formattazione basta una istruzione...
    che versione hai di Excel? non dovrebbe cancellare i controlli... perlomeno a me non li cancella (excel 2007 - 2010)

    Vanni
     
    Sub ripdiag()
    
    Cells.Clear
    
    End Sub
    
    



  • di HarryBosch data: 30/08/2012 16:14:38

    ho letto male...
    mea culpa



  • di Max (utente non iscritto) data: 30/08/2012 16:40:27

    Grazie Vecchio Frac.
    In effetti formattare un intero foglio è dispendioso ma poichè il resto del programmino è molto semplice, non ci sono problemi. Tuttavia tengo buono il tuo giusto consiglio.

    Grazie mille per il ciclo. Molto elegante. Ho inserito un'ulteriore istruzione (vedi sotto) anche per la textbox poichè non veniva cancellata. Funziona perfettamente.

    Grazie ancora.

    Con l'occasione posso chiederti se ti è chiara la riga:
    ActiveSheet.Shapes(ActiveSheet.Shapes(Lines).Name).Delete

    perchè è inserito ActiveSheet.Shapes(Line).Name all'interno di un ulteriore ActiveSheet.Shapes???

    ho cercato in giro ma proprio non trovo risposta
     
    ' elimino tutte le linee
    For Each shp In ActiveSheet.Shapes
         If shp.Type = msoLine Then shp.Delete
         'If shp.Type = msoTextBox Then shp.Delete
    Next
    
    'elimino la/le text box
    For Each shp2 In ActiveSheet.Shapes
         If shp2.Type = msoTextBox Then shp2.Delete
    Next



  • di Vecchio Frac data: 30/08/2012 19:14:31

    Infatti come intuisci non ha senso in questo contesto, è scritta male, probabilmente volevano riferirsi alle linee attraverso il loro nome :)
    Inoltre attenzione che se la TextBox non è un controllo inserito via barra strumenti "Moduli" ma via barra strumenti "Strumenti di controllo", allora il type del controllo non msoTextBox bensì msoOLEControlObject. In questo caso però ti spazza via anche eventuali command button inseriti nello stesso modo... se devi eliminare un'unica textbox presente fallo riferendoti al suo nome.
     
    For Each shp In ActiveSheet.Shapes
         If shp.Type = msoLine Or shp.Name = "TextBox1" Then shp.Delete
    Next






  • di Max (utente non iscritto) data: 31/08/2012 08:31:17

    Nuovamente grazie Vecchio Frac. Proverò i tuoi suggerimenti come esercizio... male non mi farà!

    Sei un grande!!!



  • di Vecchio Frac data: 31/08/2012 08:57:36

    Piano con gli epiteti :)
    Non sono molto alto, grande ma solo di età ;)

    Per fortuna c'è Vanni che abbassa la media ed è più fresco di me :D