[Risolto] Inserire righe da cella con valore da formula

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

[Risolto] Inserire righe da cella con valore da formula

Messaggio da samurai76 »

Ciao, mi chiamo Samuele e sto cercando di trovare il modo per inserire un certo numero di righe partendo da una cella selezionata.
Inoltre questa cella dovrebbe avere il valore rimandato da una formula(per es. =DOMENICA.DI.PASQUA(ANNO(B2))).

Dal forum inglesehttps://forum.openoffice.org/en/forum/v ... 20&t=62397

ho trovato questa soluzione per aggiungere righe partendo da una cella selezionata ma non riesco a modificarla(sono ignorante in programmazione e le prove fatte sono solo "empiriche") in modo che inserisca le righe da una cella predefinita nella macro.

Codice: Seleziona tutto

Sub MyInsertRow_1

Dim oDoc As Object
Dim oSheet As Object

Dim oCellRange As Object
Dim rowsSelected As Long
Dim rowIndex As Long

   oDoc = ThisComponent
   oSheet = oDoc.getCurrentController().ActiveSheet

   oCellRange    = ThisComponent.getCurrentSelection()
   rowsSelected  = oCellRange.Rows.GetCount()
   rowIndex = oCellRange.getCellByPosition(0,0).getCellAddress().Row 

   oSheet.Rows.insertByIndex(rowIndex,1)

End Sub
Riassumo cosa dovrebbe fare la macro:
1-calcolare il valore di una formula
2-cercare la cella con questo valore
3-inserire sopra la cella delle righe vuote

Potete aiutarmi?

Grazie
Samuele
Ultima modifica di samurai76 il venerdì 23 marzo 2018, 21:10, modificato 2 volte in totale.
Libreoffice 6 su ubuntu 17.04
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da samurai76 »

...ho risolto in parte(sempre con prove empiriche...ma funziona!) con questo:

Codice: Seleziona tutto

Sub MyInsertRow_1

Dim oDoc As Object
Dim oSheet As Object

Dim oCellRange As Object
Dim rowsSelected As Long
Dim rowIndex As Long

oDoc = ThisComponent

oSheet = oDoc.getCurrentController().ActiveSheet

oCellRange = oDoc.Sheets(3).getCellRangeByName("B15")

rowsSelected  = oCellRange.Rows.GetCount()
rowIndex = oCellRange.getCellByPosition(0,0).getCellAddress().Row 

oSheet.Rows.insertByIndex(rowIndex,5)

End Sub
Mi manca solo far cercare al posto della cella B15 il valore della formula =DOMENICA.DI.PASQUA(ANNO(B2))

Grazie per la pazienza
Libreoffice 6 su ubuntu 17.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da patel »

allega un file di esempio da testare
-------------------
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
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da samurai76 »

Ciao Patel, grazie per la disponibilità!

Allora, per prima cosa tieni presente che sto usando Libreoffice 4.4 portable al lavoro(proverò ad aggiornare a breve) mentre a casa uso LO 6.
Mi sono accorto che le macro di LO 6 non sono del tutto retrocompatibili...comunque non importa aggiornerò quello al lavoro...

Il file che ho allegato è stato creato con LO 4.4 e non non è completo visto che non riesco a superare il problema in oggetto.

Nel secondo foglio del file, se premi il pulsante giallo "prova2" parte una macro che ho creato sommando tanti pezzi presi da forum o dal registratore macro di LO.

Come puoi vedere nella macro alle righe 14(16), 61 e 70 avrei bisogno di far cercare la data corretta in base al cambiamento della data di Paqua. Per cui in questo caso, per es. nella riga 16 della macro, la data di Paqua si trova nella riga A11 del secondo foglio ma se cambio la data(in particolare l'anno ) col selezionatore nel primo foglio ovviamente la posizione della data di Pasqua cambia.

Spero essermi spiegato bene e di non pretendere troppo.

Grazie
Samuele

P.s: non non so nulla di programmazione BASIC
Allegati
MASTER.ods
(26.8 KiB) Scaricato 113 volte
Libreoffice 6 su ubuntu 17.04
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da samurai76 »

...scusami patel, nel dubbio che tu non possa trovare la macro nel file allegato la metto qui sotto.

Codice: Seleziona tutto

Sub MyInsertRow_1
rem ---------------------inserisce righe da cella predefinita---------
Dim oDoc As Object
Dim oSheet As Object

Dim oCellRange As Object
Dim rowsSelected As Long
Dim rowIndex As Long

oDoc = ThisComponent

oSheet = oDoc.getCurrentController().ActiveSheet

oCellRange = oDoc.Sheets(1).getCellByPosition(1,11)
'oCellRange = oDoc.getCurrentSelection()
'oCellRange = oDoc.Sheets(1).getCellRangeByName("A11")

rowsSelected  = oCellRange.Rows.GetCount()
rowIndex = oCellRange.getCellByPosition(0,0).getCellAddress("").Row 

oSheet.Rows.insertByIndex(rowIndex,13)


rem ----------------------------------------------------------------copia griglia Pasqua--------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


rem -----------------------------------------------------------------attiva foglio1------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Nr"
args5(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args5())

rem -----------------------------------------------------------------seleziona griglia Pasqua da spostare----------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$D$10:$H$22"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ------------------------------------------------------------------taglia griglia Pasqua da spostare---------------------
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())

rem -------------------------------------------------------------------attiva foglio2----------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Nr"
args3(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args3())

rem --------------------------------------------------------------------seleziona cella dalla quale copiare griglia Pasqua-----
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$12"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem --------------------------------------------------------------------incolla griglia Pasqua--------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem --------------------------------------------------------------------elimina settimana Palme e Pasqua--------------------------

oCellRange = oDoc.Sheets(1).getCellRangeByName("A8")

rowsSelected  = oCellRange.Rows.GetCount()
rowIndex = oCellRange.getCellByPosition(0,0).getCellAddress("").Row 

oSheet.Rows.removeByIndex(rowIndex,4)

End Sub
Libreoffice 6 su ubuntu 17.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da patel »

non ci capisco più niente
1- hai allegato precedentemente una macro dicendo che funziona ma è da modificare
2 - hai allegato un file senza la macro
3 - hai allegato una macro diversa dalla precedente
-------------------
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
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da samurai76 »

Ops...scusami Patel, hai ragione sono io troppo incasinato!

Diciamo che nel mio secondo post ho messo la macro semplificata che vorrei modificare, in altre parole un pezzo dell'ultima macro che ho inserito.

Domani mattina ti allego un file con la macro semplificata che funziona in modo che tu riesca a capire cosa vorrei fare.

Grazie
Buona notte
Libreoffice 6 su ubuntu 17.04
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da samurai76 »

...ecco son riuscito a sistemare il file lo stesso!

Come vedi nel file, premendo il pulsante "prova" nel secondo foglio, la macro inserisce 13 righe partendo dalla riga 11.

Io invece vorrei inserire nella riga 16 della macro, al posto della cella A11 la cella che ha come valore il risultato della formula =DOMENICA.DI.PASQUA(ANNO(B2)) che ovviamente cambia di posizione in base all'anno in corso.

Spero di essere stato più chiaro.

Grazie per la pazienza
Allegati
MASTER2.ods
(24.77 KiB) Scaricato 125 volte
Libreoffice 6 su ubuntu 17.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da patel »

Codice: Seleziona tutto

Sub MyInsertRow_1
oDoc = ThisComponent
oSheet = oDoc.Sheets(1)
pasqua = oDoc.Sheets(0).getCellRangeByName("E2").Value
for riga = 1 to 54
  if oSheet.getCellByPosition(1,riga).Value = pasqua then Exit for
next    
oSheet.Rows.insertByIndex(riga,13)
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
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da samurai76 »

Grande Patel...grazie infinite, proprio quello che volevo!!!

Solo un piccolo ritocchino se possibile e dopo sarebbe perfetta.

Si può fare in modo che le 13 righe le aggiunga dopo oppure prima della cella della data di Paqua?

Perdonami se approfitto così spudoratamente...
Libreoffice 6 su ubuntu 17.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da patel »

samurai76 ha scritto: Si può fare in modo che le 13 righe le aggiunga dopo oppure prima della cella della data di Paqua?
in base a cosa ?
-------------------
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
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da samurai76 »

...no no, in base al bisogno...nel senso che vorrei impostare la macro in modo che mi aggiunga le 13 righe partendo da n righe prima o n righe dopo della cella "pasqua"...ma l'n righe prima o l'n righe dopo è esclusivo e lo definisco in precedenza nella macro.

Grazie
Libreoffice 6 su ubuntu 17.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da patel »

Codice: Seleziona tutto

oSheet.Rows.insertByIndex(riga-1,13)
con un po' di iniziativa ci saresti potuto arrivare da solo
-------------------
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
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: inserire righe da cella con valore ottenuto da formula

Messaggio da samurai76 »

con un po' di iniziativa ci saresti potuto arrivare da solo
'
...hai perfettamente ragione patel...e ti assicuro che per me la sfida di riuscire da solo in queste cose e' sempre allettante.

Ma da ignorante in programmazione, in questi giorni, di iniziativa ne ho avuta tanta per cui, visto la facilità con cui hai risolto il mio problema, mi son permesso di approfittare delle tue competenze per alleviare un pò i miei "sforzi".

E di questo ti sono profondamente grato!!!

Metto risolto e farò il possible per arrangiarmi :super:

Un salutone e grazie

Samuele
Libreoffice 6 su ubuntu 17.04
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: [Risolto] Inserire righe da cella con valore da formula

Messaggio da samurai76 »

Ciao Patel, avrei bisogno di un altro aiutino...ma non vorrei aprire un altra discussione visto che l'argomento è lo stesso.
Sto ampliando la macro per automatizzare altre procedure e mi ritrovo a riutilizzare in parte il codice sotto che mi hai consigliato.
La cosa che non riesco ad evitare è che il ciclo for porti a termine l'istruzione nel caso in cui la dichiarazione non fosse vera, in altre parole
che il codice sotto non inserisca le righe qualora durante il ciclo non trovasse la data di Pasqua. :crazy:

Codice: Seleziona tutto

Sub MyInsertRow_1
oDoc = ThisComponent
oSheet = oDoc.Sheets(1)
pasqua = oDoc.Sheets(0).getCellRangeByName("E2").Value
for riga = 1 to 54
  if oSheet.getCellByPosition(1,riga).Value = pasqua then Exit for
next   
oSheet.Rows.insertByIndex(riga,13)
End Sub
Grazie
Libreoffice 6 su ubuntu 17.04
samurai76
Messaggi: 23
Iscritto il: martedì 20 marzo 2018, 20:45

Re: [Risolto] Inserire righe da cella con valore da formula

Messaggio da samurai76 »

...allora sembra che il codice sotto funzioni ma non son proprio sicuro che sia corretto...potrebbe andar bene o si può organizzare meglio?

Codice: Seleziona tutto

    Sub MyInsertRow_1
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(1)
    pasqua = oDoc.Sheets(0).getCellRangeByName("E2").Value
    for riga = 1 to 54
      if oSheet.getCellByPosition(1,riga).Value = pasqua then 
    oSheet.Rows.insertByIndex(riga,13)
   
Exit for
End if 
next
 End Sub
Libreoffice 6 su ubuntu 17.04
Rispondi