[Risolto] Copia e incolla speciale tra fogli su prima riga
[Risolto] Copia e incolla speciale tra fogli su prima riga
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
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
Ultima modifica di Record il lunedì 16 luglio 2018, 13:39, modificato 2 volte in totale.
OOo 3.4 Win7
Re: Copia e incolla speciale tra fogli su prima riga libera
Per imparare
http://professoressa.altervista.org/Dis ... re_OOo.pdf
http://www.pitonyak.org/oo.php
prova questa
se non funziona allega un file di esempio con anche il risultato desiderato.
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
-------------------
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
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
Re: Copia e incolla speciale tra fogli su prima riga libera
Grazie a patel per la sollecita risposta.
Allego un file di esempio perchè mi pare non funzioni.
Grazie
Allego un file di esempio perchè mi pare non funzioni.
Grazie
- Allegati
-
- esempio per macro.ods
- (11.29 KiB) Scaricato 205 volte
OOo 3.4 Win7
Re: Copia e incolla speciale tra fogli su prima riga libera
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
-------------------
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
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
Re: Copia e incolla speciale tra fogli su prima riga libera
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
ho commentato le righe di codice per quello che ho capito.
Non capisco dove le scrive nel foglio "Dati".
Puoi aiutarmi ancora?
Grazie!
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
Non capisco dove le scrive nel foglio "Dati".
Puoi aiutarmi ancora?
Grazie!
OOo 3.4 Win7
Re: Copia e incolla speciale tra fogli su prima riga libera
Scusami, ma tu ti eri spiegato bene, sono io che ho capito fischi per fiaschi
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
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
Non viene usato l'incolla speciale ma il range viene convertito in array di valori
-------------------
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
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
[Risolto]Copia e incolla speciale tra fogli su prima riga li
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
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
OOo 3.4 Win7
Re: [Risolto] Copia e incolla speciale tra fogli su prima ri
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
-------------------
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
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