Eliminare riga inserita in var
Hai un problema con Excel? 
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 |
Vuoi Approfondire?