[Risolto] Macro inserimento e cancellazione riga

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

[Risolto] Macro inserimento e cancellazione riga

Messaggio da geovign »

Sono da giorni che sto provando a realizzare il "Quaderno di Campagna" con fogli di calcolo per la mia piccola azienda agricola.
Ho già imbastito i diversi fogli contenenti tabelle e macro collegate, prendendo spunto dal forum.
Ora sono arrivate le difficoltà per me, in quanto neofita nelle macro e sue strutture/comandi quindi profondo ignorante del linguaggio basic.
Il file allegato contiene macro per inserimento/modifica o cancellazione di prodotto fertilizzante.
Primo problema:
Nella macro di inserimento del prodotto nella subroutine "cmdWriteCell" , prima della scrittura delle celle, inserisco una riga vuota. In questo modo però la formattazione delle celle che inserisco è in tutto identica a titoli delle colonne (tutte formattate come testo e centrate - vedi riga 5) e non come testo/numeri ed allineate al bisogno (vedi riga 6) come dai campi nella maschera.
Secondo problema:
Sempre nella stessa macro dovrei inserire la soubroutine per la cancellazione del prodotto ricercato. E qua non so proprio come fare.
Grazie per l'aiuto.
Saluti
Geo
Allegati
Arch Fert.ods
(21.96 KiB) Scaricato 80 volte
Ultima modifica di charlie il lunedì 14 gennaio 2019, 18:53, modificato 3 volte in totale.
Motivazione: Inserita spunta verde
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro inserimento e cancellazione riga

Messaggio da Gaetanopr »

Salve, per quanto riguarda la formattazione della riga credo che questo avvenga al tuo primo inserimento, perché con i successivi inserisce la riga formattata non come i titoli delle colonne.
Ti basta formattare inizialmente la riga 5, in ogni caso non hai bisogno di formattare a testo la cella, ti basta lasciare la formattazione di default di calc, poi sei tu a decidere se inserire testo o numeri( string, value) da macro.
Ho modificato la macro che modifica il prodotto e aggiunto la macro elimina.
Le macro sono abbastanza semplici eseguono un ciclo e quando trovano il nome del prodotto, lo modificano o lo eliminano.


Saluti
Allegati
Arch Fert.ods
(21.7 KiB) Scaricato 112 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Macro inserimento e cancellazione riga

Messaggio da geovign »

Ciao Gaetanopr,
grazie per la immediata risposta.
Intanto vorrei chiederti:
1) Se non erro la formattazione predefinita di LibO è cat=Numero e formato=Standard ... e questa posso lasciarla così che funziona sempre. A questo punto il problema formattazione delle nuove righe ad ogni inserimento riguarda esclusivamente l'allineamento dei caratteri dentro le celle. Senza doverlo modificare la prima volta è possibile farlo in automatico? Avrei trovato una soluzione "molto poco elegante" che sembra che funzioni: riempire le celle (B5:H5 - prima registrazione) con spazi, formattare a piacere poi nascondere la riga.
2) La subroutine "Scrivi_Modifiche" non funziona correttamente in quanto, ad esempio, se introduco modifiche al prodotto B mi sovrascrive il contenuto delle celle nella riga sopra. Non capisco il ciclo for/if da te inserito all'interno della subroutine "Scrivi_Modifiche" quando già presente nella sub "riempicombox". Sicuramente una svista ....
3) Ottima la macro di cancellazione del prodotto funziona egregiamente.
Saluti
Geo
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro inserimento e cancellazione riga

Messaggio da Gaetanopr »

buongiorno,
1) ti basta formattare la riga 5 come serve a te e lasciarla vuota, le successive avranno la stessa formattazione e avrai sempre tutti i record con una riga vuota sotto.
Non hai motivo di nasconderla o di riempirla con spazi ect ect.
2) la macro che modifica l'ho provata e và a modificare(sovrascrivere) il record selezionato nella combobox.Il ciclo for next serve ad individuare la riga che deve essere modificata ed è indipendente dal ciclo for next già presente nella sub "riempicombox che serve a popolare la combobox con i dati presenti in tabella.
Quindi, prima riempi la combo poi selezioni il record da modificare o eliminare e successivamente tramite un altro ciclo lo individui nella tabella e lo modifichi oppure lo elimini.
Ritornando alla questione formattazione, naturalmente si può fare tutto da macro, ma non ne vedo la necessità dato che puoi risolvere bene senza.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Macro inserimento e cancellazione riga

Messaggio da geovign »

Grazie Gaetanopr dei chiarimenti.
Saluti
LibO 7 su LinuxMint 21
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: [Risolto] Macro inserimento e cancellazione riga

Messaggio da geovign »

Fermo restando che quanto richiesto al primo post è stato risolto con successo, solo ultimamente ho potuto provare in modo approfondito la macro di cancellazione riga.
Avrei alcune necessità collegate alla stessa macro, posso continuare su questa discussione?
Saluti
Geo
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Macro inserimento e cancellazione riga

Messaggio da Gaetanopr »

Si continua pure qua, l'argomento è sempre quello.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: [Risolto] Macro inserimento e cancellazione riga

Messaggio da geovign »

Ok.
Le mie necessità sono due, ma partiamo con la prima.
Ho notato che eseguendo la macro elimina i campi della maschera restano compilati con i dati del prodotto cancellato (non specificato nei post precedenti, mea culpa).
Ho provato, dopo il ciclo for:
- ad inserire dlg.getControl .... .text = "" come nelle altre macro, ma nulla;
- a richiamare la macro che svuota i campi della maschera con il comando call, ma nulla.
Ovviamente raggiungo lo scopo utilizzando il pulsante "svuota campi" che avvia la macro .
Sarebbe interessante che pulizia dei campi (con focus finale sulla combobox1) fosse eseguita in automatico.
Provo a combinare qualcosa da solo, ma è peggio che andar di notte ...
Riallego il file.
Saluti
Geo
Allegati
Arch Fert modificato.ods
(23.63 KiB) Scaricato 90 volte
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Macro inserimento e cancellazione riga

Messaggio da Gaetanopr »

geovign ha scritto: Ho provato, dopo il ciclo for:
Non funziona perchè ho inserito exit sub all'interno del ciclo for in modo tale da uscire dalla procedura appena trovato e cancellato il prodotto.
Per risolvere puoi togliere exit sub, oppure ancor meglio inserire le righe di codice

Codice: Seleziona tutto

dlg.getControl .... .text = ""
tra Sheet.Rows.removeByIndex(i, 1) e exit sub.
Alla fine setti il focus dove desideri sempre prima di exit sub.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: [Risolto] Macro inserimento e cancellazione riga

Messaggio da geovign »

... non ci avevo fatto caso al secondo exit sub dentro il ciclo for. Per forza le mie modifiche non andavano.
Ora richiamando anche la macro "riempicombobox" dopo lo svuotamento dei campi, mi ricarica correttamente l'elenco dei valori aggiornato. Questa era la seconda necessità.
Perchè dici che è meglio lasciare exit sub all'interno del ciclo for invece di inserirlo al termine del ciclo (dopo next i)?
Saluti
Geo
LibO 7 su LinuxMint 21
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Macro inserimento e cancellazione riga

Messaggio da Gaetanopr »

Exit sub o lo togli o rimane all'interno di for next fuori dal ciclo non ha senso, quando scrivi una macro devi cercare di renderla più efficiente possibile.
Io ad esempio lavoro con un file di 150000 righe x 40 colonne, immagina di dover cancellare un record che si trova alla riga 10000, con exit sub dopo 10000 cicli avendo trovato il record lo cancellerebbe ed uscirebbe dalla procedura, invece senza exit sub, la macro continuerebbe fino a riga 150000 impiegando tempo e risorse inutili.
Se hai tabelle con poche centinaia di righe non fà differenza, ma quando le righe diventano tante io evito pure i cicli for next.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: [Risolto] Macro inserimento e cancellazione riga

Messaggio da geovign »

Chiarissimo, nel momento in cui sono soddisfatte le condizioni è inutile fare eseguire tutto il ciclo.
Allego il file definitivo per i posteri.
Grazie.
Geo
Allegati
Arch Fert definitivo.ods
(22.99 KiB) Scaricato 96 volte
LibO 7 su LinuxMint 21
Rispondi