Pagina 1 di 1

[Risolto] Copia e incolla speciale tra fogli su prima riga

Inviato: domenica 15 luglio 2018, 23:32
da Record
Buonasera,
sto cercando di creare una macro di Calc che mi permetta di:
copiare il contenuto del range di celle A2:DZ2 di un foglio chiamato "Formula" ed incollarlo speciale (solo testo, numeri e data/ora senza formule e formattazione) in un foglio chiamato "Dati" nella prima riga vuota in basso.
Le mie basilari conoscenze non mi permettono di venirne a capo.
Sono riuscito attraverso il registratore di macro a creare la porzione di codice che copia ed incolla correttamente.
Non so come fare per scrivere nella prima riga disponibile nel foglio di destinazione.
Oltretutto il registratore genera codice con un linguaggio che non conosco.
Provengo da esperienze con il basic, mi piacerebbe che fosse scritto in modo più comprensibile per me.
Ho provato a cercare sul forum ma non ho trovato aiuto negli argomenti già trattati.

Grazie

Re: Copia e incolla speciale tra fogli su prima riga libera

Inviato: lunedì 16 luglio 2018, 7:54
da patel
Per imparare
http://professoressa.altervista.org/Dis ... re_OOo.pdf
http://www.pitonyak.org/oo.php

prova questa

Codice: Seleziona tutto

sub CopiaIncollaUltimaRiga ' per copiare valori
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Sheet1 = Doc.Sheets.getByName("Formula")
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
source = Sheet.getCellRangeByName("A2:D22").getDataArray
nrighe = UBound(source()) - LBound(source())
Sheet1.getCellRangeByName("A" & Lastrow & ":D" & Lastrow + nrighe).setDataArray(Source)
End Sub
se non funziona allega un file di esempio con anche il risultato desiderato.

Re: Copia e incolla speciale tra fogli su prima riga libera

Inviato: lunedì 16 luglio 2018, 9:48
da Record
Grazie a patel per la sollecita risposta.
Allego un file di esempio perchè mi pare non funzioni.
Grazie

Re: Copia e incolla speciale tra fogli su prima riga libera

Inviato: lunedì 16 luglio 2018, 11:41
da patel
avevo capito che il range da copiare fosse A2:D22 (ventidue) invece vuoi copiare una sola riga, comunque la macro funziona, solo che nel file di esempio la riga 2 è vuota

Codice: Seleziona tutto

sub CopiaIncollaUltimaRiga ' per copiare valori
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Sheet1 = Doc.Sheets.getByName("Formula")
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
source = Sheet.getCellRangeByName("A2:DZ2").getDataArray
nrighe = UBound(source()) - LBound(source())
Sheet1.getCellRangeByName("A" & Lastrow & ":DZ" & Lastrow + nrighe).setDataArray(Source)
End Sub

Re: Copia e incolla speciale tra fogli su prima riga libera

Inviato: lunedì 16 luglio 2018, 12:28
da Record
Grazie ma continuo a non capire...
La riga 2 del foglio "Formula" contiene dati. Forse mi sono spiegato male.
Devo prendere la seconda riga del foglio "Formula" (resta sempre fissa la seconda) e copiarla nella prima riga disponibile del foglio "Dati" (aumenta sempre di una).
Nell'esempio c'è anche il foglio "Origine" ma è solo dove scrivo i dati, non è interessato dalla macro.

In particolare non capisco dove incolla speciale nel foglio dati

Codice: Seleziona tutto

sub CopiaIncollaUltimaRiga ' per copiare valori
Doc = ThisComponent 'legge il file
Sheet = Doc.Sheets(0) '?
Sheet1 = Doc.Sheets.getByName("Formula") 'seleziona il foglio "Formula"
c = Sheet1.createCursor '?
c.gotoEndOfUsedArea(false) 'trova l'ultima riga occupata?
LastRow = c.RangeAddress.EndRow + 2 'imposta la riga libera in cui scrivere?
source = Sheet.getCellRangeByName("A2:DZ2").getDataArray 'preleva i dati da copiare
nrighe = UBound(source()) - LBound(source()) '?
Sheet1.getCellRangeByName("A" & Lastrow & ":DZ" & Lastrow + nrighe).setDataArray(Source) '?
End Sub
ho commentato le righe di codice per quello che ho capito.
Non capisco dove le scrive nel foglio "Dati".
Puoi aiutarmi ancora?
Grazie!

Re: Copia e incolla speciale tra fogli su prima riga libera

Inviato: lunedì 16 luglio 2018, 12:55
da patel
Scusami, ma tu ti eri spiegato bene, sono io che ho capito fischi per fiaschi

Codice: Seleziona tutto

sub CopiaIncollaUltimaRiga ' per copiare valori
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Formula")
Sheet1 = Doc.Sheets.getByName("Dati")
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
source = Sheet.getCellRangeByName("A2:DZ2").getDataArray
nrighe = UBound(source()) - LBound(source())
Sheet1.getCellRangeByName("A" & Lastrow & ":DZ" & Lastrow + nrighe).setDataArray(Source)
End Sub
Questa macro funziona anche con range di più righe, nel tuo caso nrighe è sempre zero
Non viene usato l'incolla speciale ma il range viene convertito in array di valori

[Risolto]Copia e incolla speciale tra fogli su prima riga li

Inviato: lunedì 16 luglio 2018, 13:27
da Record
Grazie!
Funziona perfettamente.
Come posso sdebitarmi?

Ne approfitto per chiedere se è possibile che la macro si fermi alla prima riga disponibile nel caso in cui i dati in una riga vengano cancellati.
Ho provato ma ora va comunque sotto l'ultima riga piena saltando quelle eventualmente vuote.
In ogni caso è utilizzabile così comunque.
Grazie ancora
Andrea

Re: [Risolto] Copia e incolla speciale tra fogli su prima ri

Inviato: lunedì 16 luglio 2018, 17:39
da patel

Codice: Seleziona tutto

sub CopiaIncollaRigaVuota ' per copiare valori
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Formula")
Sheet1 = Doc.Sheets.getByName("Dati")
source = Sheet.getCellRangeByName("A2:DZ2").getDataArray
r = 1
while Sheet1.getCellRangeByName("A" & r).String <> ""
  r = r + 1
Wend
Sheet1.getCellRangeByName("A" & r & ":DZ" & r).setDataArray(Source)
End Sub

Re: [Risolto] Copia e incolla speciale tra fogli su prima ri

Inviato: martedì 17 luglio 2018, 1:39
da Record
Grazie, è perfetto.