Pagina 1 di 1

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

Inviato: domenica 13 ottobre 2013, 2:53
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!!!!!

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

Inviato: domenica 13 ottobre 2013, 18:29
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' ;)

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

Inviato: martedì 15 ottobre 2013, 1:50
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

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

Inviato: martedì 15 ottobre 2013, 8:49
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

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

Inviato: martedì 15 ottobre 2013, 11:24
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

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

Inviato: martedì 15 ottobre 2013, 18:11
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

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

Inviato: mercoledì 16 ottobre 2013, 0:47
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

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

Inviato: mercoledì 16 ottobre 2013, 8:53
da Mizio1961
Oops ho dimenticato di togliere quella riga
Togli la riga dove c'è scritto endif e vedrai che funziona.
Saluti

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

Inviato: mercoledì 16 ottobre 2013, 15:19
da alessandro712000
yes!!! risolto!!! grazie ancora per la disponibilità davvero da applausi!!!

ciao
Alessandro