[Risolto] cut and paste macro celle adiacenti su piu' righe

Creare una macro - Scrivere uno script - Usare le API
Rispondi
alessandro712000
Messaggi: 5
Iscritto il: domenica 13 ottobre 2013, 2:21

[Risolto] cut and paste macro celle adiacenti su piu' righe

Messaggio da alessandro712000 »

ciao, dopo anni di Excel mi sono convertito a OpenOffice, del quale sono un neofita.

Vorrei creare una macro per fare il "taglia e incolla" di una cella ripetendolo piu' volte su celle adiacenti nella stessa riga. La macro dovrebbe poi "saltare" alla riga successiva e ripetere la procedura. Vorrei anche poter attivare la macro su una riga utilizzando una combinazione di tasti (es: CTRL+U) una volta posizionato sulla corretta riga di partenza.

Per semplicità allego esempio:

posizione iniziale: cella A5
cut A5 e paste in B4
posizionati in C5
cut C5 e paste in D4
posizionati in E5
cut E5 e paste in F4
posizionati in A7 (2 righe sotto la posizione iniziale)

supponendo quindi di avere 1000 righe simili, vorrei, semplicemente premendo una combinazione di tasti (es: CTRL+U) eseguire la macro ad ogni inizio di coppie di righe.

Mi sarei aspettato che fosse abbastanza facile, ma dopo 2 ore di smanettamenti vari non sono riuscito a capire come fare.

Per favore, mi aiutate???????????

Grazie!!!!!
Allegati
esempio macro.ods
file esempio
(10.93 KiB) Scaricato 148 volte
Ultima modifica di alessandro712000 il mercoledì 16 ottobre 2013, 15:20, modificato 1 volta in totale.
alessandro712000 - Apache OpenOffice 4.0.1 - Windows 8
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: cut and paste macro su celle adiacenti e su piu' righe

Messaggio da Mizio1961 »

Ciao Alessandro
Quello che chiedi è 'facilmente' ottenibile attraverso il registratore di macro, che esiste anche in OpenOffice.
Da lì ho derivato la macro che segue:

Codice: Seleziona tutto

sub CutPaste
   rem ----------------------------------------------------------------------
   rem define variables
   dim document   as object
   dim dispatcher as object
   dim rw as integer
   dim args6(0) as new com.sun.star.beans.PropertyValue
   dim args8(0) as new com.sun.star.beans.PropertyValue
   rem ----------------------------------------------------------------------
   rem get access to the document
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   for rw = 25 to 31 step 2
      '--- PRIMO CUT & PASTE DI RIGA DA A2 A B1
      args6(0).Name = "ToPoint"
      args6(0).Value = "$A$" & rw
      dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
      rem ----------------------------------------------------------------------
      dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
      rem ----------------------------------------------------------------------
      args8(0).Name = "ToPoint"
      args8(0).Value = "$B$" & rw-1
      dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())
      rem ----------------------------------------------------------------------
      dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
      '--- SECONDO CUT & PASTE DI RIGA DA C2 A D1
      args6(0).Name = "ToPoint"
      args6(0).Value = "$C$" & rw
      dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
      rem ----------------------------------------------------------------------
      dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
      rem ----------------------------------------------------------------------
      args8(0).Name = "ToPoint"
      args8(0).Value = "$D$" & rw-1
      dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())
      rem ----------------------------------------------------------------------
      dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
      '--- TERZO CUT & PASTE DI RIGA DA E2 A F1
      args6(0).Name = "ToPoint"
      args6(0).Value = "$C$" & rw
      dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
      rem ----------------------------------------------------------------------
      dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
      rem ----------------------------------------------------------------------
      args8(0).Name = "ToPoint"
      args8(0).Value = "$D$" & rw-1
      dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())
      rem ----------------------------------------------------------------------
      dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
      '-------------------------------------------------------------------------
   next rw
end sub
Questa riga di codice for rw = 25 to 31 step 2 la devi personalizzare con i numeri della riga iniziale e di quella finale del range di righe su cui devi fare l'operazione che hai chiesto.
Ti allego anche il tuo file con dentro la macro
Saluti e... 'benvenuto' ;)
Allegati
CutPastedaRegMacro.ods
(11.55 KiB) Scaricato 176 volte
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
alessandro712000
Messaggi: 5
Iscritto il: domenica 13 ottobre 2013, 2:21

Re: cut and paste macro su celle adiacenti e su piu' righe

Messaggio da alessandro712000 »

ciao Mizio,

grazie molte per la tua soluzione. L'ho provata e funziona per le prime 2 celle (fa il taglia e incolla) ma non per le altre dove si "limita" a fare il "copia e incolla".

Inoltre, terminata la riga, la macro non riposiziona il cursore all'inizio della successiva.

Sono io che non ho capito qualcosa (probabile)????

Inoltre, mi è un pochino ostico capire come modificare il codice (a parte la modifica suggerita per il numero di linee). Potresti per favore dirmi come registrare automaticamente la macro con il Registratore e soprattutto come attivare le "Referenze relative" per fare in modo che si possa dire "seleziona" la casella immediatamente a destra dell'attuale piuttosto che specificare non so "B3"??

grazie!!!

ciao
Alessandro
alessandro712000 - Apache OpenOffice 4.0.1 - Windows 8
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: cut and paste macro su celle adiacenti e su piu' righe

Messaggio da Mizio1961 »

Ciao Alessandro
Puoi allegare una parte del tuo file così di inserisco la macro corretta coi riferimenti relativi.
In questo modo entrambi usiamo il tempo in modo corretto, altrimenti ci rincorriamo con soluzioni parziali che mancano sempre di qualcosa
Saluti
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
alessandro712000
Messaggi: 5
Iscritto il: domenica 13 ottobre 2013, 2:21

Re: cut and paste macro su celle adiacenti e su piu' righe

Messaggio da alessandro712000 »

ciao Mizio,

allego tuo file con aggiunto tab "Test".

Ho modificato il ciclo for con i giusti numeri di riga (dalla 5 alle 23).

grazie!!
Alessandro
Allegati
CutPastedaRegMacro (1).ods
(11.72 KiB) Scaricato 155 volte
alessandro712000 - Apache OpenOffice 4.0.1 - Windows 8
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: cut and paste macro su celle adiacenti e su piu' righe

Messaggio da Mizio1961 »

Ciao Alessandro
Vedi se così funziona come ti occorre
Ora devi personalizzare il valore della variabile cini che contiene il valore della colonna iniziale dei dati e i valori nella for come per la versione precedente
Saluti
Allegati
CutPastedaRegMacro.ods
(12.2 KiB) Scaricato 204 volte
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
alessandro712000
Messaggi: 5
Iscritto il: domenica 13 ottobre 2013, 2:21

Re: cut and paste macro su celle adiacenti e su piu' righe

Messaggio da alessandro712000 »

ciao Mizio,

grazie ancora per il tuo prezioso aiuto. Purtroppo il tuo file non è compilabile e la macro non eseguibile :(

Vedi allegato.

ciao
Alessandro
Allegati
Errore.odt
(145.22 KiB) Scaricato 164 volte
alessandro712000 - Apache OpenOffice 4.0.1 - Windows 8
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: cut and paste macro su celle adiacenti e su piu' righe

Messaggio da Mizio1961 »

Oops ho dimenticato di togliere quella riga
Togli la riga dove c'è scritto endif e vedrai che funziona.
Saluti
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
alessandro712000
Messaggi: 5
Iscritto il: domenica 13 ottobre 2013, 2:21

[RISOLTO] cut and paste macro su celle adiacenti e su piu' r

Messaggio da alessandro712000 »

yes!!! risolto!!! grazie ancora per la disponibilità davvero da applausi!!!

ciao
Alessandro
alessandro712000 - Apache OpenOffice 4.0.1 - Windows 8
Rispondi