Inserimento righe in tabelle consecutive
Hai un problema con Excel? 
Inserimento righe in tabelle consecutive
di Massi data: 20/01/2016 08:50:37
Buon giorno,
ho un problema con l'inserimento di più righe aggiuntive al fondo di una tabella tramite macro.
premendo un pulsante vorrei aggiungere una riga a fondo tabella, copiando l'ultima riga precedente.
vorrei che premendo ogni volta lo stesso pulsante la macro si ripetesse.
esempio
-Ultima riga della tabella è la 10
-premo il pulsante e aggiungo nella riga 11 la copia della riga 10
-(L'ultima riga della tabella ora è la 11)
-premendo nuovamente il pulsante deve aggiungere nella riga 12 la copia della riga 11
- ecc...
in oltre vorrei che tutto il resto del foglio dopo l'ultima riga della tabella slittasse una riga più in basso e non venisse sovrascritto dall'esecuzione della macro.
(Vi allego il file)
Nel file nel foglio 1 c'è la tabella1 con il pulsante1 e la tabella2 con il pulsante2.
indipendentemente dalla sequenza con cui premo il pulsante1 o il pulsante 2, vorrei che il risultato fosse quello presente nel foglio 2.
nel foglio 3 invece si vede il risultato delle macro così come funzionano in questo momento, ipotizzando di aver premuto 3 volte il pulsante1 e poi 3 volte il pulsante2.
(foglio2 e foglio3 sono puramente descrittivi e non interagiscono con nessun codice)
Allego anche il codice scritto fino ad ora.
Grazie
Massi
Sub Pulsante1_Click()
Rows("10:10").Select
Selection.Copy
Rows("11:11").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
Range("D11:F11").Select
End Sub
Sub Pulsante2_Click()
Rows("20:20").Select
Selection.Copy
Rows("21:21").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
Range("D21:F21").Select
End Sub
|
di Luca73 data: 20/01/2016 09:35:27
Ciao il tuo codice è scritto in maniera rigida ovvero punta sempre alla stesse righe (per esempio riga 10)
Devi renderlo "dinamico"
Una soluzione dovrebbe essere quella sotto riportata.
Il comando End(xlDown) parte dalla cella in esame e va all'ultima occupata o alla prima libera (vedi help)
Il comando Offset(3, 0) sposta la cella/range in esame di un certo numero di righe e colonne
Nel mio programmino cerca l'ultima cella scritta e la copia di uno sotto...
Ciao
Luca
Sub Pulsante1_Click()
Range("A2").End(xlDown).EntireRow.Copy
Range("A2").End(xlDown).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Application.CutCopyMode = False
Range("A2").End(xlDown).Formula = Range("A2").End(xlDown) + 1
Range("A2").End(xlDown).Select
End Sub
Sub Pulsante2_Click()
Range("A2").End(xlDown).Offset(3, 0).End(xlDown).EntireRow.Copy
Range("A2").End(xlDown).Offset(3, 0).End(xlDown).Offset(1, 0).EntireRow.Insert Shift:=xlDown
Application.CutCopyMode = False
Range("A2").End(xlDown).Offset(3, 0).End(xlDown).Formula = Range("A2").End(xlDown).Offset(3, 0).End(xlDown) + 1
Range("A2").End(xlDown).Offset(3, 0).End(xlDown).Select
End Sub |
di Mister_x (utente non iscritto) data: 20/01/2016 10:11:49
ciao
modifica alle tue sub()
riallego il tuo file
ciao
Option Explicit
Sub Pulsante1_Click()
Dim i As Long
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) = "" Then
Range("A" & i & ":I" & i).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A" & i - 1 & ":I" & i - 1).Select
Selection.Copy
Range("A" & i).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Exit For
End If
Next i
End Sub
Sub Pulsante2_Click()
Dim i As Long
i = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & i & ":I" & i).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A" & i - 1 & ":I" & i - 1).Select
Selection.Copy
Range("A" & i).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
|
di Massi data: 21/01/2016 08:36:24
Grazie Mister_X, fa esattamente quello di cui avevo bisogno.
Potresti spiegarmi le stringhe per favore?
Vuoi Approfondire?