copia ed accoda verticalment

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Barakkino
Messaggi: 129
Iscritto il: mercoledì 30 aprile 2014, 12:53

copia ed accoda verticalment

Messaggio da Barakkino »

ciao
é possibile con una macro copiare un gruppo di celle (es. Foglio1.A10:Z200 o meglio da A10:fino a colonna Z tutte le righe con dati ) ed incollarle accodandole in un altro foglio (es. Foglio2.dalla prima riga colonna A vuota)

grazie
openoffice 4 su win 10
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1750
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: copia ed accoda verticalment

Messaggio da gioh66 »

Magari posta un file d'esempio con il risultato voluto.
...se sei soddisfatto delle risposte ricevute metti il [Risolto] https://forum.openoffice.org/it/forum/v ... f=9&t=5661

Libreoffice 6/7 Ubuntu 22.04 - PcLinuxOS - LinuxMint 21
Barakkino
Messaggi: 129
Iscritto il: mercoledì 30 aprile 2014, 12:53

Re: copia ed accoda verticalment

Messaggio da Barakkino »

gioh66 ha scritto:Magari posta un file d'esempio con il risultato voluto.
ciao
ecco il file :)

grazie della tua attenzione
Allegati
prova copia incolla.ods
(13.4 KiB) Scaricato 101 volte
openoffice 4 su win 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: copia ed accoda verticalment

Messaggio da patel »

prova questa

Codice: Seleziona tutto

sub copia
Dim Doc As Object, Sheet As Object, range As Object, CellAddress
Dim I As Integer, ActiveCell as object, RIGA as integer, colA as integer
Doc = ThisComponent
Sheet = Doc.Sheets(0) 
Sheet1 = Doc.Sheets(1)
Do While Sheet.getCellByPosition(0, LastRow).String <> ""
  LastRow = LastRow  + 1
Loop
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow1 = c.RangeAddress.EndRow + 2
Range =Sheet.getCellRangeByPosition(0, 1,  25, LastRow - 1).getRangeAddress()
CellAddress  = Sheet1.getCellRangeByName("A" & LastRow1 ).getCellAddress()  
Sheet.copyRange(CellAddress, Range)
Sheet.getCellRangeByPosition(0, 1,  25, LastRow).clearcontents(31)
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Barakkino
Messaggi: 129
Iscritto il: mercoledì 30 aprile 2014, 12:53

Re: copia ed accoda verticalment

Messaggio da Barakkino »

Grazie Patel
Funziona alla perfezione, Ho aggiunto anche il cancellare alcune celle ed il cursore posizionarsi in A1.
Ho riscontrato però un problema (che per mio errore non ho detto) alcune colonne sono protette e con formule.
Se tolgo la protezione per errore possono essere modificate e con la macro venire cancellate.
E' possibile cancellare solo alcune colonne?
Grazie


Codice: Seleziona tutto

 sub copia
'sub eliminaContenuti
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$AB$14"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVD"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$AB$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVD"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$AB$16"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVD"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$AB$17"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Flags"
args8(0).Value = "SVD"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args8())


Dim Doc As Object, Sheet As Object, range As Object, CellAddress
Dim I As Integer, ActiveCell as object, RIGA as integer, colA as integer
Doc = ThisComponent
Sheet = Doc.Sheets(0) 
Sheet1 = Doc.Sheets(1)
Do While Sheet.getCellByPosition(0, LastRow).String <> ""
  LastRow = LastRow  + 1
Loop
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow1 = c.RangeAddress.EndRow + 2
Range =Sheet.getCellRangeByPosition(0, 1,  25, LastRow - 1).getRangeAddress()
CellAddress  = Sheet1.getCellRangeByName("A" & LastRow1 ).getCellAddress()  
Sheet.copyRange(CellAddress, Range)
Sheet.getCellRangeByPosition(0, 1,  25, LastRow).clearcontents(31)

'rem ---------------------------------------------------------------------
'dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())


End Sub
openoffice 4 su win 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: copia ed accoda verticalment

Messaggio da patel »

per cancellare la colonna C

Codice: Seleziona tutto

Sheet.getCellRangeByPosition(2, 1,  2, LastRow).clearcontents(31)
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Barakkino
Messaggi: 129
Iscritto il: mercoledì 30 aprile 2014, 12:53

Re: copia ed accoda verticalment

Messaggio da Barakkino »

La macro, con le modifiche (grazie Patel), funziona perfettamente.
Ho riscontrato un problema: se la prima cella da copiare è vuota si blocca :crazy:
Grazie dell'aiuto.
openoffice 4 su win 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: copia ed accoda verticalment

Messaggio da patel »

allega un file di esempio con i dati e l'ultimo codice, oppure lancia la macro con F8, step by step e controlla dove si blocca
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Rispondi