Pannello di Controllo Moderatore ]

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

Creare una macro - Scrivere uno script - Usare le API

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

Messaggioda Record » domenica 15 luglio 2018, 23:32

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
Ultima modifica di Record il lunedì 16 luglio 2018, 13:39, modificato 2 volte in totale.
OOo 3.4 Win7
Record
 
Messaggi: 12
Iscritto il: lunedì 8 ottobre 2012, 0:47

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

Messaggioda patel » lunedì 16 luglio 2018, 7:54

Per imparare
http://professoressa.altervista.org/Dis ... re_OOo.pdf
http://www.pitonyak.org/oo.php

prova questa
Codice: Seleziona tutto   Espandi visualeStringi visuale
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.
-------------------
OpenOffice 4.1 e Libre Office 6 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2860
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

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

Messaggioda Record » lunedì 16 luglio 2018, 9:48

Grazie a patel per la sollecita risposta.
Allego un file di esempio perchè mi pare non funzioni.
Grazie
Allegati
esempio per macro.ods
(11.29 KiB) Scaricato 5 volte
OOo 3.4 Win7
Record
 
Messaggi: 12
Iscritto il: lunedì 8 ottobre 2012, 0:47

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

Messaggioda patel » lunedì 16 luglio 2018, 11:41

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   Espandi visualeStringi visuale
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
-------------------
OpenOffice 4.1 e Libre Office 6 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2860
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

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

Messaggioda Record » lunedì 16 luglio 2018, 12:28

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   Espandi visualeStringi visuale
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!
OOo 3.4 Win7
Record
 
Messaggi: 12
Iscritto il: lunedì 8 ottobre 2012, 0:47

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

Messaggioda patel » lunedì 16 luglio 2018, 12:55

Scusami, ma tu ti eri spiegato bene, sono io che ho capito fischi per fiaschi
Codice: Seleziona tutto   Espandi visualeStringi visuale
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
-------------------
OpenOffice 4.1 e Libre Office 6 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2860
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

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

Messaggioda Record » lunedì 16 luglio 2018, 13:27

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
OOo 3.4 Win7
Record
 
Messaggi: 12
Iscritto il: lunedì 8 ottobre 2012, 0:47

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

Messaggioda patel » lunedì 16 luglio 2018, 17:39

Codice: Seleziona tutto   Espandi visualeStringi visuale
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
-------------------
OpenOffice 4.1 e Libre Office 6 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2860
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

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

Messaggioda Record » martedì 17 luglio 2018, 1:39

Grazie, è perfetto.
OOo 3.4 Win7
Record
 
Messaggi: 12
Iscritto il: lunedì 8 ottobre 2012, 0:47


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti