[Risolto] Macro Sposta dati da una riga ad un altra
-
- Messaggi: 19
- Iscritto il: giovedì 25 agosto 2016, 12:14
[Risolto] Macro Sposta dati da una riga ad un altra
Buongiorno a tutti,
Vi chiedo se fosse possibile avere un aiuto per scrivere una macro che automatizzi lo spostamento di dati da una riga ad un altra nello stesso foglio.
Mi spiego meglio:
Nel Foglio1, Range A1:D1 ho dei valori.
La Macro deve spostare i dati due righe più sotto (Range A3:D3), ripulire A1:D1 e al successivo inserimento deve scrivere i dati nella prima riga vuota.
Purtroppo non sono in grado di scriverla da solo, ho cercato nel forum ma ho trovato solo macro che fanno lo stesso lavoro che vorrei fare io ma da un foglio ad un altro e non sono riuscito a modificarla.
Vi ringrazio anticipatamente e spero di riuscire a risolvere questo problema
Vi chiedo se fosse possibile avere un aiuto per scrivere una macro che automatizzi lo spostamento di dati da una riga ad un altra nello stesso foglio.
Mi spiego meglio:
Nel Foglio1, Range A1:D1 ho dei valori.
La Macro deve spostare i dati due righe più sotto (Range A3:D3), ripulire A1:D1 e al successivo inserimento deve scrivere i dati nella prima riga vuota.
Purtroppo non sono in grado di scriverla da solo, ho cercato nel forum ma ho trovato solo macro che fanno lo stesso lavoro che vorrei fare io ma da un foglio ad un altro e non sono riuscito a modificarla.
Vi ringrazio anticipatamente e spero di riuscire a risolvere questo problema
Ultima modifica di Andrea Toniolo il lunedì 29 agosto 2016, 14:22, modificato 1 volta in totale.
Andrea
OpenOffice 4.1.0
W7
OpenOffice 4.1.0
W7
Re: Macro Sposta dati da una riga ad un altra
allega un file di esempio con i dati ed il risultato desiderato
-------------------
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
-
- Messaggi: 19
- Iscritto il: giovedì 25 agosto 2016, 12:14
Re: Macro Sposta dati da una riga ad un altra
Ciao e grazie per l'interessamento,
in pratica come puoi vedere nell'esempio allegato, la macro attivabile dal pulsante, deve spostare i dati inseriti nel range di celle A2:D2 nella tabella sottostante andando a scrivere nella prima riga vuota e a pulire il range appena citato A2:D2.
Successivamente avevo pensato di agganciare una macro che allo stesso tempo li ordini in ordine di data, ma questo non dovrebbe essere un problema.
Rimango a disposizione per eventuali chiarimenti
Ancora Grazie
in pratica come puoi vedere nell'esempio allegato, la macro attivabile dal pulsante, deve spostare i dati inseriti nel range di celle A2:D2 nella tabella sottostante andando a scrivere nella prima riga vuota e a pulire il range appena citato A2:D2.
Successivamente avevo pensato di agganciare una macro che allo stesso tempo li ordini in ordine di data, ma questo non dovrebbe essere un problema.
Rimango a disposizione per eventuali chiarimenti
Ancora Grazie
- Allegati
-
- Esempio Copia sotto prima riga vuota.ods
- (11.62 KiB) Scaricato 334 volte
Andrea
OpenOffice 4.1.0
W7
OpenOffice 4.1.0
W7
Re: Macro Sposta dati da una riga ad un altra
prova questa
Codice: Seleziona tutto
sub CopiaIncollaUltimaRiga
Doc = ThisComponent
Sheet = Doc.Sheets(0)
LastRow =LastRowInColonna(Sheet,0) + 2
Sheet.getCellRangeByName("A" & Lastrow & ":D" & Lastrow).setDataArray(Sheet.getCellRangeByName("A2:D2").getDataArray
End Sub
Function LastRowInColonna(oSheet As Object, Col As Long) As Long
Dim c As Object, oRangePiena As Object, LastRow As Long
c = oSheet.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow
oRangePiena = oSheet.getCellRangeByPosition(Col, 0, Col, LastRow).queryContentCells(1+2+4).RangeAddresses
If Ubound(oRangePiena) < 0 Then
LastRowInColonna = - 1
Else
LastRowInColonna = oRangePiena(Ubound(oRangePiena)).EndRow
End if
End Function
-------------------
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
-
- Messaggi: 19
- Iscritto il: giovedì 25 agosto 2016, 12:14
Re: Macro Sposta dati da una riga ad un altra
Grazie,
Domani la provo e ti faccio sapere
Buona serata
Domani la provo e ti faccio sapere
Buona serata
Andrea
OpenOffice 4.1.0
W7
OpenOffice 4.1.0
W7
-
- Messaggi: 19
- Iscritto il: giovedì 25 agosto 2016, 12:14
Re: Macro Sposta dati da una riga ad un altra
Ciao,
Ho provato la tua Macro che in linea di massima va bene, solo che non riesco ad adattarla al mio reale foglio, sono alle prime armi con Calc ed è più difficile di quello che pensavo .
Potresti per cortesia aiutarmi ad adattarlo al reale foglio?
I dati vengono scritti nel Range di Celle E4:O4 e devono essere spostati dalla prima riga sottostante E5:O5.
Inoltre dovendo pensavo di creare con il registratore di Macro anche una macro che cancella i dati nella riga iniziale dopo averli spostati e una che ordina i dati nella tabella per data, ti volevo chiedere come fare ad eseguire contemporaneamente più macro con lo stesso comando, con excel ero in grado di farlo, funziona nello stesso modo?
Allego il nuovo esempio e ti ringrazio per la tua disponibilità e pazienza
Buona giornata
Ho provato la tua Macro che in linea di massima va bene, solo che non riesco ad adattarla al mio reale foglio, sono alle prime armi con Calc ed è più difficile di quello che pensavo .
Potresti per cortesia aiutarmi ad adattarlo al reale foglio?
I dati vengono scritti nel Range di Celle E4:O4 e devono essere spostati dalla prima riga sottostante E5:O5.
Inoltre dovendo pensavo di creare con il registratore di Macro anche una macro che cancella i dati nella riga iniziale dopo averli spostati e una che ordina i dati nella tabella per data, ti volevo chiedere come fare ad eseguire contemporaneamente più macro con lo stesso comando, con excel ero in grado di farlo, funziona nello stesso modo?
Allego il nuovo esempio e ti ringrazio per la tua disponibilità e pazienza
Buona giornata
- Allegati
-
- esempio 2.ods
- (18.21 KiB) Scaricato 224 volte
Andrea
OpenOffice 4.1.0
W7
OpenOffice 4.1.0
W7
Re: Macro Sposta dati da una riga ad un altra
il basic di Calc è molto diverso ed il registratore di macro produce codice incomprensibile e spesso non funzionante.
un buon testo è http://www.pitonyak.org/oo.php
la copia di un range non copia i formati, quindi predisponi la tabella con i formati corretti
un buon testo è http://www.pitonyak.org/oo.php
Codice: Seleziona tutto
sub CopiaIncollaUltimaRiga
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("prova")
LastRow =LastRowInColonna(Sheet,4) + 2 ' 4 indica la colonna E (su calc la numerazione inizia da zero)
Sheet.getCellRangeByName("E" & Lastrow & ":O" & lastrow).setDataArray(Sheet.getCellRangeByName("E4:O4").getDataArray
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
-
- Messaggi: 19
- Iscritto il: giovedì 25 agosto 2016, 12:14
Re: Macro Sposta dati da una riga ad un altra
Ciao
Ho provato la nuova macro ma mi da un errore che puoi vedere nell'allegato.
GRazie anche per le altre utili indicazioni
Ho provato la nuova macro ma mi da un errore che puoi vedere nell'allegato.
GRazie anche per le altre utili indicazioni
Andrea
OpenOffice 4.1.0
W7
OpenOffice 4.1.0
W7
Re: Macro Sposta dati da una riga ad un altra
la nuova macro sostituisce la precedente pari nome e deve essere accompagnata dalla function che rimane immutata
Codice: Seleziona tutto
sub CopiaIncollaUltimaRiga
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("prova")
LastRow =LastRowInColonna(Sheet,4) + 2 ' 4 indica la colonna E (su calc la numerazione inizia da zero)
Sheet.getCellRangeByName("E" & Lastrow & ":O" & lastrow).setDataArray(Sheet.getCellRangeByName("E4:O4").getDataArray
End Sub
Function LastRowInColonna(oSheet As Object, Col As Long) As Long
Dim c As Object, oRangePiena As Object, LastRow As Long
c = oSheet.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow
oRangePiena = oSheet.getCellRangeByPosition(Col, 0, Col, LastRow).queryContentCells(1+2+4).RangeAddresses
If Ubound(oRangePiena) < 0 Then
LastRowInColonna = - 1
Else
LastRowInColonna = oRangePiena(Ubound(oRangePiena)).EndRow
End if
End Function
-------------------
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
-
- Messaggi: 19
- Iscritto il: giovedì 25 agosto 2016, 12:14
Re: Macro Sposta dati da una riga ad un altra
Ciao,
Grazie per la correzione, non avevo capito.
Ora la macro funziona correttamente e sono riuscito anche a registrare le altre due che ordinano per data la tabella e puliscono la prima riga.
Per eseguirle contemporaneamente ho creato una quarta macro che richiama le prime tre in ordina:
Call CopiaSotto
Call Ordina
Call Pulisci PrimaRiga
Grazie ancora del tuo preziosissimo supporto e di tutti quelli come te che si dedicano a questo utilissimo Forum.
Buona giornata a tutti
Grazie per la correzione, non avevo capito.
Ora la macro funziona correttamente e sono riuscito anche a registrare le altre due che ordinano per data la tabella e puliscono la prima riga.
Per eseguirle contemporaneamente ho creato una quarta macro che richiama le prime tre in ordina:
Call CopiaSotto
Call Ordina
Call Pulisci PrimaRiga
Grazie ancora del tuo preziosissimo supporto e di tutti quelli come te che si dedicano a questo utilissimo Forum.
Buona giornata a tutti
Andrea
OpenOffice 4.1.0
W7
OpenOffice 4.1.0
W7