Eliminare riga inserita in var



  • Eliminare riga inserita in var
    di Danilo (utente non iscritto) data: 13/07/2012

    Ciao a tutti ho un piccolo problema,
    ho creato il codice che posto sotto. mi cerca nella colonna 10 la parola closed e dove la trova copia tutta la riga in un altro foglio.
    ho la necessità che dopo aver copiato la riga me la elimini dal primo foglio poichè rimane vuota.


     
    Sub macro()
    Dim Riga As Integer
    For i = 2 To 65536
    Sheets("Issues").Activate
    If ActiveSheet.Cells(i, 1) = vbNullString Then Exit For
    If ActiveSheet.Cells(i, 10) = "Closed" Then
    Rows(i).Select
    Riga = Intervallo.Row (non so che mettere)
    Selection.Cut
    Sheets("Closed").Activate
    Range("A65535").End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Sheets("Issues").Activate
    Rows(Riga).Select.Delete
    End If
    Next i
    End Sub



  • di Patel (utente non iscritto) data: 13/07/2012

    Prova questa
     
    Sub macro()
    Dim Riga As Integer
    For i = 2 To 20
    With Sheets("Issues")
      If .Cells(i, 1) = vbNullString Then Exit For
      If .Cells(i, 10) = "Closed" Then
        .Rows(i).Cut
        Riga = Sheets("Closed").Cells(Rows.Count, "A").End(xlUp).Row
        Sheets("Closed").Rows(Riga).Insert
        .Rows(i).Delete
      End If
    End With
    Next i
    End Sub



  • di Danilo (utente non iscritto) data: 13/07/2012

    Purtroppo non posso fare la funzione taglia e incolla celle tagliate.
    quando ci provo mi dice che sto tentando di effettuare modifiche su celle oe colonne etc etc.

    per questo ho usato il copia e incolla.



  • di Patel (utente non iscritto) data: 13/07/2012

    Ho usato cut perché lo hai usato tu
    selection.cut
    ma puoi usare anche paste



  • di Danilo (utente non iscritto) data: 13/07/2012

    Perfetto ora funziona ma non continua...si ferma alla prima con closed e non fa check sulle altre. infatti quella subito dopo ha closed ma non la trasporta.
    ora l'ho scritto cosi
     
    Sub macro2()
    Dim Riga As Integer
    For i = 2 To 65536
    With Sheets("Issues")
      If .Cells(i, 1) = vbNullString Then Exit For
      If .Cells(i, 10) = "Closed" Then
        .Rows(i).Select
        Selection.Copy
        Riga = Sheets("Closed").Cells(Rows.Count, "A").End(xlUp).Row
        Sheets("Closed").Rows(Riga).Insert
        .Rows(i).Delete
      End If
    End With
    Next i
    End Sub



  • di Danilo (utente non iscritto) data: 13/07/2012

    Ho risolto.
    c'erano delle righe vuote in mezzo^^.
    grazie mille



  • di Patel (utente non iscritto) data: 13/07/2012

    Hai la tendenza a scrivere codice inutile tipo
    .rows(i).select
    selection.copy
    quando basta
    .rows(i).copy



  • di Francesco c. (utente non iscritto) data: 26/07/2012

    Vi posto il mio contributo, se può servire come spunto.
    faccio uso di un filtro automatico per selezionare le sole righe che contengono la parola "closed" nella decima colonna.
    il codice è commentato, così risulta più leggibile :)
    se vi va, fate qualche commento al codice.
     
    Sub taglia_e_incolla_se_closed()
    Dim r As Range
    
        'imposta il filtro automatico sulla decima colonna
        [a1].AutoFilter Field:=10, Criteria1:="closed"
        'copia la tabella filtrata dalla colonna A alla colonna K comprese
        ActiveSheet.[a:k].Copy
        'incolla i dati filtrati nell'altro foglio
        ActiveSheet.Paste Destination:=Worksheets("closed").[a1]
        'definisce un range composto dall'intera tabella filtrata, tranne la riga di intestazione
        Set r = [a1].CurrentRegion.Offset(1, 0).Resize([a1].CurrentRegion.Rows.Count - 1, [a1].CurrentRegion.Columns.Count)
        'elimina l'intera riga marcata "closed"
        r.EntireRow.Delete
        'annulla il filtro automatico
        [a1].AutoFilter
        
    End Sub
    



  • di Harrybosch data: 26/07/2012

    Ciao francesco
    interessante la variante che hai proposto! però ho notato che cancella l'intera tabella nel caso il criterio di ricerca non trovasse alcun "closed", immagino per via del comando set. si potrebbe ovviare verificando se dopo il filtro iniziale rimane solo la riga di instestazione e, in tal caso, evitare la copiatura.
    o proponi un controllo di tipo diverso?
    ciao vanni

     
    Sub taglia_e_incolla_se_closed()
        Dim r As Range
        [a1].AutoFilter Field:=10, Criteria1:="closed"
    
         'dopo l'applicazione del filtro, se è rimasta solo la riga di intestazione...
         If Cells(Rows.Count, "A").End(xlUp).Row = 1 Then
         'allora esco e annullo il filtro, altrimenti proseguo
         Else
    
        ActiveSheet.[a:k].Copy
        ActiveSheet.Paste Destination:=Worksheets("closed").[a1]
        Set r = [a1].CurrentRegion.Offset(1, 0).Resize([a1].CurrentRegion.Rows.Count - 1, [a1].CurrentRegion.Columns.Count)
        r.EntireRow.Delete
        
        End If
    
        'annulla il filtro automatico
        [a1].AutoFilter
    End Sub



  • di Francesco c. (utente non iscritto) data: 26/07/2012

    Ottima osservazione! e ottima soluzione :) (anche se io eviterei un if...then vuoto rovesciandolo.

    grazie harrybosch per la precisazione... non avevo fatto un test completo (ossia il caso che nessun "closed" fosse previsto).
     
    If Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
        ActiveSheet.[a:k].Copy
        ActiveSheet.Paste Destination:=Worksheets("closed").[a1]
        Set r = [a1].CurrentRegion.Offset(1, 0).Resize([a1].CurrentRegion.Rows.Count - 1, [a1].CurrentRegion.Columns.Count)
        r.EntireRow.Delete
    End If