Pannello di Controllo Moderatore ]

Piccolo Gestionale con Macro

Creare una macro - Scrivere uno script - Usare le API

Piccolo Gestionale con Macro

Messaggioda sanraff » venerdì 6 luglio 2018, 7:01

Buongiorno a tutti, al file di cui allego esempio, volevo realizzare un piccolo gestionale con l'uso di macro.
Premetto che ne esiste già una collegata al pulsante, che ho trovato all'interno di questo forum, però quest'ultima dà la possibilità di riportare i dati dal foglio1 al foglio2, mentre io vorrei che la cosa avvenisse nella stessa pagina come visibile dal file, cioè i dati di sinistra riportarli nella tabella di destra, premetto che è ancora in fase di sviluppo e questa è solo la partenza.
C'è qualcuno che mi può spiegare come va modificata la macro?

Spero di esser stato chiaro e ringrazio anticipatamente a chi mi darà una mano.
Allegati
Piccolo Gestionale.ods
(19.03 KiB) Scaricato 5 volte
OpenOffice 3.3 SU WINDOWS 7
sanraff
 
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Piccolo Gestionale con Macro

Messaggioda patel » venerdì 6 luglio 2018, 9:51

la macro è molto semplice da capire, basta un po' di buona volontà, hai fatto qualche tentativo per modificarla ? cosa non capisci ?
per ottenere l'ultima riga occupata della colonna M devi utilizzare una funzione di questo tipo
Codice: Seleziona tutto   Espandi visualeStringi visuale
Function  LastRowNumberinColumn(oSheet, numcol)
oCol = oSheet.getColumns().getByIndex(numcol)
rd = oCol.createReplaceDescriptor
rd.searchRegularExpression = true
rd.setSearchString(".")
find = oCol.FindAll(rd)
aray = Split(find.AbsoluteName,"$")
LastRowNumberinColumn = val(aray(ubound(Aray)))
end Function

che chiamerai con
Codice: Seleziona tutto   Espandi visualeStringi visuale
LastRow = LastRowNumberinColumn(Sh, 12)
-------------------
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: 2837
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Piccolo Gestionale con Macro

Messaggioda sanraff » domenica 8 luglio 2018, 21:09

Ciao patel,
patel ha scritto:la macro è molto semplice da capire, basta un po' di buona volontà, hai fatto qualche tentativo per modificarla ? cosa non capisci ?

Premetto che prima di scrivere al forum, avevo già fatto delle prove, ed avevo corretto la macro in questo modo:
Codice: Seleziona tutto   Espandi visualeStringi visuale
Sub Main
Dim Doc As Object, Sh As Object
Doc = ThisComponent
Sh = Doc.Sheets.getByName("Foglio1")
c = Sh.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow +1

Sh.getCellRangeByName("M6",  LastRow).String = Sh.getCellRangeByName("D2").String
Sh.getCellRangeByName("N6",  LastRow).String = Sh.getCellRangeByName("D4").String
Sh.getCellRangeByName("O6",  LastRow).String = Sh.getCellRangeByName("D6").Value
Sh.getCellRangeByName("P6",  LastRow).String = Sh.getCellRangeByName("D8").Value
Sh.getCellRangeByName("Q6",  LastRow).String = Sh.getCellRangeByName("D12").Value
Sh.getCellRangeByName("R6",  LastRow).String = Sh.getCellRangeByName("D18").Value
Sh.getCellRangeByName("S6",  LastRow).String = Sh.getCellRangeByName("D20").Value
Sh.getCellRangeByName("T6",  LastRow).String = Sh.getCellRangeByName("D21").String

Sh.getCellRangeByName("D2:D10").ClearContents(4+1)

End Sub

e per errore avevo postato il file sbagliato, di cui allego quello corretto.

Quello che non riesco ad ottenere è la successione della scrittura nelle righe a partire dalla colonna M12 riga M6, cioè non avviene il
Codice: Seleziona tutto   Espandi visualeStringi visuale
"LastRow = c.RangeAddress.EndRow +1"
, ad ogni pressione del pulsante, la riga viene sovrascritta e non ho capito come si fa a realizzare la successione.

Ho provato anche a sostituire questa stringa:
Codice: Seleziona tutto   Espandi visualeStringi visuale
Sh.getCellByPosition("M6",  LastRow).String = Sh.getCellRangeByName("D2").String

con questa
Codice: Seleziona tutto   Espandi visualeStringi visuale
Sh.getCellByPosition(12,  LastRow).String = Sh.getCellRangeByName("D2").String

però il record a partire dalla colonna M12 viene posizionato in Riga M22 e non è quello che vorrei realizzare io.

Ho dato una lettura anche alla macro da te suggerita, però non ho capito come applicarla al mio file.

E' possibile sapere come devo modificare la mia macro?, e nel caso in cui dovesse essere sostituita dalla tua, come va applicata?, grazie
Allegati
Piccolo Gestionale1.ods
(19.36 KiB) Scaricato 5 volte
OpenOffice 3.3 SU WINDOWS 7
sanraff
 
Messaggi: 316
Iscritto il: sabato 27 ottobre 2012, 14:08

Re: Piccolo Gestionale con Macro

Messaggioda patel » lunedì 9 luglio 2018, 6:41

tu vai proprio a caso con le modifiche, ti avevo dato il suggerimento ma non ci hai neppure provato, prova così
Codice: Seleziona tutto   Espandi visualeStringi visuale
Sub Main
If MsgBox("Vuoi aggiungere nuova riga ? ", 32+4, "AGGIUNGI RIGA") = 7 Then Exit Sub

Dim Doc As Object, Sh As Object, Sh2 As Object
Dim LastRow As Long
Doc = ThisComponent
Sh = Doc.Sheets.getByName("Foglio1")
LastRow = LastRowNumberinColumn(Sh, 12)

Sh.getCellByPosition(12,  LastRow).String = Sh.getCellRangeByName("D2").String
Sh.getCellByPosition(13,  LastRow).String = Sh.getCellRangeByName("D4").String
Sh.getCellByPosition(14,  LastRow).Value = Sh.getCellRangeByName("D6").Value
Sh.getCellByPosition(15,  LastRow).Value = Sh.getCellRangeByName("D8").Value
Sh.getCellByPosition(16,  LastRow).Value = Sh.getCellRangeByName("D12").Value
Sh.getCellByPosition(17,  LastRow).Value = Sh.getCellRangeByName("D18").Value
Sh.getCellByPosition(18,  LastRow).Value = Sh.getCellRangeByName("D20").Value

'Sh.getCellRangeByName("D2:D10").ClearContents(4+1)
End Sub

Function  LastRowNumberinColumn(oSheet, numcol) ' la migliore
oCol = oSheet.getColumns().getByIndex(numcol)
rd = oCol.createReplaceDescriptor
rd.searchRegularExpression = true
rd.setSearchString(".")
find = oCol.FindAll(rd)
aray = Split(find.AbsoluteName,"$")
LastRowNumberinColumn = val(aray(ubound(Aray)))
end Function
-------------------
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: 2837
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti