Re: [utenti] conversione Macro Excel in Starbasic
Vi chiedo scusa me ne sono accordo dopo un paio di messaggi inoltrati, non utilizzando la mia posta privata non mi ricordavo che quella aziendale prevede la richiesta di notifica. Colgo l'occasione per ringraziare ancora le persone che mi hanno aiutato nel risolvere le problematiche espresse. Un rungraziamento particolare a Paolo per la cortesia ed il tempo impiegato nelle spiegazioni, ne farò tesoro e base di partenza con le indicazioni di studio e approfondimento che mi ha indicato (ciò non mi esimerà dal contattarvi di nuovo in caso di necessità). Alle prossime. Danilo Paolo Mantovani ha scritto: Ciao Danilo, i tuoi post mi chiedono sempre la ricevuta di ritorno, potresti disattivarla per favore? Nord Studio snc ha scritto: Mi hai dato una mano incredibile, ti ringrazio Paolo. Ti chiedo o vi chiedo se altri mi possono aiutare, ancora l'ultimo sforzo: se la riga che io sono andato a copiare nel secondo foglio la voglio colorare con un fondo salmone che istruzioni devo aggiungere? Il codice che ti ha suggerito Bart Aimar va benissimo, in alternativa potresti aggiungere in fondo alla macro questa linea: oShArchivio.Rows(2).CellBackColor = RGB(255, 128, 128) Come vedi è molto simile a quella di Bart, ma ho usato la funzione RGB per rendere più "leggibile" il colore. La funzione RGB è descritta nell Help di StarBasic (scrivi RGB nell'editor e schiaccia F1) Perchè la codifica che mi hai mandato tu, sintatticamente è molto più ristretta di quella che mi appare se io registro una macro? Per fortuna, nonostante l'età, contro il registratore di macro riesco ancora a giocarmela ;-) Battute a parte, anche la codifica del registratore VBA è estremamente prolissa. la macro che ti ho postato, ripulita di commenti e righe vuote, tolti anche i due controlli iniziali che nella tua versione non erano previsti, consta di sole 12 linee, delle quali solo 7 sono in realtà strettamente necessarie, altre 5 servono solo a migliorare la leggibilità Pertanto, abbiamo 7 linee contro 50 e passa della tua macro originale registrata in VBA Ti faccio un esempio stupido: ho provato a registrare una macro per il cambio colore di cui ti accennavo e mi ha restituito tutto questo po po di roba: sub colore [...] end sub Il registratore di macro registra tutto quello che succede. Spesso però quello che ti serve davvero è svolto da una piccola parte delle righe registrate. Ad esempio, se ci fai caso, la macro che ti ho passato non fa assolutamente spostare il cursore e non attiva/disattiva le tabelle. Il registratore invece tiene conto di tutti gli spostamenti del cursore ecc. Questo avviene sia in VBA che in StarBasic. Oltre a questo, il registratore di macro di OpenOffice usa una sintassi piuttosto prolissa e monotona (ma tutto sommato semplice) perché di fatto qualsiasi operazione viene effettuata chiamando sempre lo stesso servizio DispatchHelper. C'è una guida in italiano che spiega passo passo come programmare in Starbasic? http://docs.sun.com/app/docs/coll/1278.1?l=it&q=StarOffice+8+Collection%2C+Italian Con un po di ricerca negli archivi di questa lista e della lista d...@it.openoffice.org potrai tovare moltissime informazioni interessanti su come cominciare al meglio. Ti segnalo comunque questi thread dove ci sono ulteriori considerazioni sul registratore e consigli per iniziare (leggi attentamente anche le risposte): http://www.mail-archive.com/d...@it.openoffice.org/msg01125.html http://www.mail-archive.com/d...@it.openoffice.org/msg01267.html Per focalizzare sulle cose cose essenziali, per iniziare al meglio ti serve: - Manuale SUN StarBasic (vedi sopra) - Scarica e installa il tool Xray di Bernard Marcelly - Scarica e installa il SDK (Software Development Kit) di OOo Non ho i link sottomano ma sono certo che non avrai difficoltà a trovare tutto. Se l'inglese non è un problema ci sono anche molti altri documenti tra i quali spicca il famoso "Andrew Pitonyak's Macro Document" La cosa mi interesserebbe per bagaglio personale ma quando vedo tutte queste costruzioni per un'operazione base perdo l'amore...cosa che invece nella tua codifica e abbastanza intuitiva la cosa almeno all'apparenza. Come ho detto il codice registrato da OpenOffice sembra complesso ma alla fine è molto semplice. Ora non voglio dilungarmi in una trattazione completa, ma basta osservare meglio il codice per vedere che qualsiasi operazione viene eseguita con una costruzione simile a questa: dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "ToPoint" args1(0).Value = "$A$3:$K$3" dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) Come vedi le prime righe preparano i parametri del comando sotto forma di coppie nome:valore In questo caso il nome parametro è ToPoint e il valore desiderato è "$A$3:$K$3" L'ultima riga è quella che effettivamente esegue il comando che è quello specificato dalla stringa ".uno:GoToCell" In altre parole: "sposta
Re: [utenti] conversione Macro Excel in Starbasic
Ciao Danilo, i tuoi post mi chiedono sempre la ricevuta di ritorno, potresti disattivarla per favore? Nord Studio snc ha scritto: Mi hai dato una mano incredibile, ti ringrazio Paolo. Ti chiedo o vi chiedo se altri mi possono aiutare, ancora l'ultimo sforzo: se la riga che io sono andato a copiare nel secondo foglio la voglio colorare con un fondo salmone che istruzioni devo aggiungere? Il codice che ti ha suggerito Bart Aimar va benissimo, in alternativa potresti aggiungere in fondo alla macro questa linea: oShArchivio.Rows(2).CellBackColor = RGB(255, 128, 128) Come vedi è molto simile a quella di Bart, ma ho usato la funzione RGB per rendere più "leggibile" il colore. La funzione RGB è descritta nell Help di StarBasic (scrivi RGB nell'editor e schiaccia F1) Perchè la codifica che mi hai mandato tu, sintatticamente è molto più ristretta di quella che mi appare se io registro una macro? Per fortuna, nonostante l'età, contro il registratore di macro riesco ancora a giocarmela ;-) Battute a parte, anche la codifica del registratore VBA è estremamente prolissa. la macro che ti ho postato, ripulita di commenti e righe vuote, tolti anche i due controlli iniziali che nella tua versione non erano previsti, consta di sole 12 linee, delle quali solo 7 sono in realtà strettamente necessarie, altre 5 servono solo a migliorare la leggibilità Pertanto, abbiamo 7 linee contro 50 e passa della tua macro originale registrata in VBA Ti faccio un esempio stupido: ho provato a registrare una macro per il cambio colore di cui ti accennavo e mi ha restituito tutto questo po po di roba: sub colore [...] end sub Il registratore di macro registra tutto quello che succede. Spesso però quello che ti serve davvero è svolto da una piccola parte delle righe registrate. Ad esempio, se ci fai caso, la macro che ti ho passato non fa assolutamente spostare il cursore e non attiva/disattiva le tabelle. Il registratore invece tiene conto di tutti gli spostamenti del cursore ecc. Questo avviene sia in VBA che in StarBasic. Oltre a questo, il registratore di macro di OpenOffice usa una sintassi piuttosto prolissa e monotona (ma tutto sommato semplice) perché di fatto qualsiasi operazione viene effettuata chiamando sempre lo stesso servizio DispatchHelper. C'è una guida in italiano che spiega passo passo come programmare in Starbasic? http://docs.sun.com/app/docs/coll/1278.1?l=it&q=StarOffice+8+Collection%2C+Italian Con un po di ricerca negli archivi di questa lista e della lista d...@it.openoffice.org potrai tovare moltissime informazioni interessanti su come cominciare al meglio. Ti segnalo comunque questi thread dove ci sono ulteriori considerazioni sul registratore e consigli per iniziare (leggi attentamente anche le risposte): http://www.mail-archive.com/d...@it.openoffice.org/msg01125.html http://www.mail-archive.com/d...@it.openoffice.org/msg01267.html Per focalizzare sulle cose cose essenziali, per iniziare al meglio ti serve: - Manuale SUN StarBasic (vedi sopra) - Scarica e installa il tool Xray di Bernard Marcelly - Scarica e installa il SDK (Software Development Kit) di OOo Non ho i link sottomano ma sono certo che non avrai difficoltà a trovare tutto. Se l'inglese non è un problema ci sono anche molti altri documenti tra i quali spicca il famoso "Andrew Pitonyak's Macro Document" La cosa mi interesserebbe per bagaglio personale ma quando vedo tutte queste costruzioni per un'operazione base perdo l'amore...cosa che invece nella tua codifica e abbastanza intuitiva la cosa almeno all'apparenza. Come ho detto il codice registrato da OpenOffice sembra complesso ma alla fine è molto semplice. Ora non voglio dilungarmi in una trattazione completa, ma basta osservare meglio il codice per vedere che qualsiasi operazione viene eseguita con una costruzione simile a questa: dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "ToPoint" args1(0).Value = "$A$3:$K$3" dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) Come vedi le prime righe preparano i parametri del comando sotto forma di coppie nome:valore In questo caso il nome parametro è ToPoint e il valore desiderato è "$A$3:$K$3" L'ultima riga è quella che effettivamente esegue il comando che è quello specificato dalla stringa ".uno:GoToCell" In altre parole: "sposta il cursore alla posizione a3:k3" Le macro registrate sono una sequenza di costruzioni simili a questa. Ci possono essere comandi che richiedono una lunga lista di parametri e altri che non richiedono nessun parametro, ma il meccanismo è sempre identico. C'è da dire che questo meccanismo basato sull'oggetto dispatcher è stato creato appositamente per il registratore di macro e non è assolutamente rappresentativo rispetto alle tecniche usate dai programmatori di macro. Certo ci possono essere casi in cui anche lo sviluppatore di macro utilizza il dispatcher ma solitamente si usano oggetti specializzati che co
Re: [utenti] conversione Macro Excel in Starbasic
ciao, mi chiamo Nicola scusate se mi intrometto ma visto che avete iniziato un argomento che che mi interessa particolarmente vorrei proporvi un mio problema simile a quello di Danilo. Sto cercando di convertire dei file di excel con delle macro che mi copiano dei dati dal foglio1 del file "vendite" e li copiano nel foglio1 del file"archivio" allego il codice vba. ' copio i dati di diverse celle nella riga 10 Range("S10") = Range("G9") Range("T10") = Range("G11") Range("U10") = Range("G49") Range("W10") = Range("a13") Range("x10") = Range("a14") Range("y10") = Range("a15") Range("z10") = Range("a16") ' seleziono il range interessato e lo copio Range("Q10:Aw10").Select Selection.Copy ' apro il file "archivio" Workbooks.Open "C:\archivio.xls" ' trovo la prima riga libera Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select 'incollo i dati copiati e salvo il file "archivio" ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close 'seleziono una cella del foglio "vendite" Range("A13").Select Grazie a tutti. Nicola - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
Nord Studio snc ha scritto: [...] >> inserisci questedue righe più o meno in fondo alla macro di Paolo >> >> ' colorare in salmone la riga 3 >> oShArchivio.GetCellByPosition(0,2).rows.CellBackColor=16744576 >> > OK ma se sevo limitare la colorazione alle celle A3:K3 ? oShArchivio.getCellRangeByName("A3:K3").CellBackColor = RGB(255,128,128) ciao Paolo M - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
Bart Aimar ha scritto: Nord Studio snc ha scritto: Mi hai dato una mano incredibile, ti ringrazio Paolo. Ti chiedo o vi chiedo se altri mi possono aiutare, ancora l'ultimo sforzo: se la riga che io sono andato a copiare nel secondo foglio la voglio colorare con un fondo salmone che istruzioni devo aggiungere? inserisci questedue righe più o meno in fondo alla macro di Paolo ' colorare in salmone la riga 3 oShArchivio.GetCellByPosition(0,2).rows.CellBackColor=16744576 OK ma se sevo limitare la colorazione alle celle A3:K3 ? - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Nord Studio snc wrote: > Non ho parole sei un grande! Azzeccata in pieno la richiesta > e funziona che è una meraviglia. Sostengo la candidatura di Paolo Mantovani per i "miti del terzo millennio". - -- Italo Vignoli tel +39.348.5653829 it...@italovignoli.com skype italovignoli -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkmISlwACgkQQ44yrkJdo0AozwCfVcMv0a1AVnHQwEnh3NBjqbl+ KNQAnj6uEraqP+GVx3oLolRSeIrNAUFP =DCz8 -END PGP SIGNATURE- - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
uff... mi correggo... Bart Aimar ha scritto: tra qui e d...@it.openoffice.org sono passati molti messaggi ... Bart - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
Nord Studio snc ha scritto: Mi hai dato una mano incredibile, ti ringrazio Paolo. Ti chiedo o vi chiedo se altri mi possono aiutare, ancora l'ultimo sforzo: se la riga che io sono andato a copiare nel secondo foglio la voglio colorare con un fondo salmone che istruzioni devo aggiungere? inserisci questedue righe più o meno in fondo alla macro di Paolo ' colorare in salmone la riga 3 oShArchivio.GetCellByPosition(0,2).rows.CellBackColor=16744576 Perch� la codifica che mi hai mandato tu, sintatticamente � molto pi� ristretta di quella che mi appare se io registro una macro? Ti faccio un esempio stupido: ho provato a registrare una macro per il cambio colore di cui ti accennavo e mi ha restituito tutto questo po po di roba: Perché Il registratore usa il dispatch... che è una cosa complicata che non ho mai capito... :-) ma ogni tanto è molto utile. Paolo saprà spiegarti meglio... C'� una guida in italiano che spiega passo passo come programmare in Starbasic? La cosa mi interesserebbe per bagaglio personale ma quando vedo tutte queste costruzioni per un'operazione base perdo l'amore... cosa che invece nella tua codifica e abbastanza intuitiva la cosa almeno all'apparenza. Di materiale in italiano non c'è molto... e al momento non ho il tempo di cercarti i link... (una consegna urgente) In generale c'è molto materiale.. ma piuttosto sparso... tra qui e d...@api.openoffice.org sono passati molti messaggi che riportavano link e istruzioni. Prova a fare qualche ricerca in rete... saluti Bart - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
Francesco Forti ha scritto: [] > Scusate, ma come presidente della associazione "Anti-UCAS" :-) dove ucas > è il famigerato ufficio complicazione affari semplici, io avrei tenuto un solo > foglio, avrei impostato una colonna con il valore "produzione" e "archivio" ed > avrei usato i filtri . Basta cambiare valore alla riga e scegliere il filtro > giusto ed > il gioco è fatto. Poi con la formattazione condizionale posso mettere il > colore che voglio alle celle dell'archivio o con una certa data o valore > economico, in modo dinamico. In linea generale sono pienamente d'accordo. Riguardo all'uso delle macro il mio motto è "se puoi, evita" Non perché le macro siano un male, solo che come tutte le cose utili, quando sono usate a sproposito diventano controproducenti. Nel caso specifico però, non ho un'opinione precisa. Non ho studiato il problema e può anche darsi che la macro in questo caso rappresenti la soluzione più efficiente o comunque più comoda. C'è da dire che spesso le macro diventano indispensabili nel momento in cui si vuole fare il lavoro di un database con un foglio elettronico. ciao Paolo M - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
Non è proprio così semplice come dici tu nel senso che i due fogli sono obbligati in quanto ci sono l'utilizzo di ben 22 colonne di lavorazione a cui vanno aggiunte tante righe quanto le commesse in lavorazione. Comunque valuterò l'utilizzo della formattazione condizionale se rientra nel nostro caso (non la conosco e quindi non mi posso esprimere a priori). Grazie per la dritta. Danilo Francesco Forti ha scritto: At 10:41 03.02.2009, Nord Studio snc wrote: Mi hai dato una mano incredibile, ti ringrazio Paolo. Ti chiedo o vi chiedo se altri mi possono aiutare, ancora l'ultimo sforzo: se la riga che io sono andato a copiare nel secondo foglio la voglio colorare con un fondo salmone che istruzioni devo aggiungere? Perchè la codifica che mi hai mandato tu, sintatticamente è molto più ristretta di quella che mi appare se io registro una macro? Ti faccio un esempio stupido: ho provato a registrare una macro per il cambio colore di cui ti accennavo e mi ha restituito tutto questo po po di roba: Scusate, ma come presidente della associazione "Anti-UCAS" :-) dove ucas è il famigerato ufficio complicazione affari semplici, io avrei tenuto un solo foglio, avrei impostato una colonna con il valore "produzione" e "archivio" ed avrei usato i filtri . Basta cambiare valore alla riga e scegliere il filtro giusto ed il gioco è fatto. Poi con la formattazione condizionale posso mettere il colore che voglio alle celle dell'archivio o con una certa data o valore economico, in modo dinamico. Ciao, Francesco A-UCAS - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
Francesco Forti ha scritto: Scusate, ma come presidente della associazione "Anti-UCAS" :-) dove ucas è il famigerato ufficio complicazione affari semplici, io avrei tenuto un solo foglio, avrei impostato una colonna con il valore "produzione" e "archivio" ed avrei usato i filtri . Basta cambiare valore alla riga e scegliere il filtro giusto ed il gioco è fatto. Poi con la formattazione condizionale posso mettere il colore che voglio alle celle dell'archivio o con una certa data o valore economico, in modo dinamico. Alla faccia della semplificazione... :-) Mi viene da pensare che la semplicità sia un mero "punto di vista"... :-) Bart - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
Re: [utenti] conversione Macro Excel in Starbasic
At 10:41 03.02.2009, Nord Studio snc wrote: >Mi hai dato una mano incredibile, ti ringrazio Paolo. >Ti chiedo o vi chiedo se altri mi possono aiutare, ancora l'ultimo sforzo: se >la riga che io sono andato a copiare nel secondo foglio la voglio colorare con >un fondo salmone che istruzioni devo aggiungere? >Perchè la codifica che mi hai mandato tu, sintatticamente è molto più >ristretta di quella che mi appare se io registro una macro? >Ti faccio un esempio stupido: ho provato a registrare una macro per il cambio >colore di cui ti accennavo e mi ha restituito tutto questo po po di roba: Scusate, ma come presidente della associazione "Anti-UCAS" :-) dove ucas è il famigerato ufficio complicazione affari semplici, io avrei tenuto un solo foglio, avrei impostato una colonna con il valore "produzione" e "archivio" ed avrei usato i filtri . Basta cambiare valore alla riga e scegliere il filtro giusto ed il gioco è fatto. Poi con la formattazione condizionale posso mettere il colore che voglio alle celle dell'archivio o con una certa data o valore economico, in modo dinamico. Ciao, Francesco A-UCAS
Re: [utenti] conversione Macro Excel in Starbasic
Mi hai dato una mano incredibile, ti ringrazio Paolo. Ti chiedo o vi chiedo se altri mi possono aiutare, ancora l'ultimo sforzo: se la riga che io sono andato a copiare nel secondo foglio la voglio colorare con un fondo salmone che istruzioni devo aggiungere? Perchè la codifica che mi hai mandato tu, sintatticamente è molto più ristretta di quella che mi appare se io registro una macro? Ti faccio un esempio stupido: ho provato a registrare una macro per il cambio colore di cui ti accennavo e mi ha restituito tutto questo po po di roba: sub colore rem -- 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 -- dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "ToPoint" args1(0).Value = "$A$3:$K$3" dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) rem -- dim args2(0) as new com.sun.star.beans.PropertyValue args2(0).Name = "BackgroundColor" args2(0).Value = 16744576 dispatcher.executeDispatch(document, ".uno:BackgroundColor", "", 0, args2()) end sub C'è una guida in italiano che spiega passo passo come programmare in Starbasic? La cosa mi interesserebbe per bagaglio personale ma quando vedo tutte queste costruzioni per un'operazione base perdo l'amore... cosa che invece nella tua codifica e abbastanza intuitiva la cosa almeno all'apparenza. Grazie ancora Danilo. Paolo Mantovani ha scritto: Ciao Danilo, Nord Studio snc ha scritto: Buongiorno, mi chiamo Danilo. Abbiamo appena migrato il pacchetto Office verso OpenOffice ma ci stiamo imbattendo in un muro per quanto riguarda l'utilizzo di una macro per il nostro sistema di pianificazione settimanale. C'è qualcuno che ci può aiutare nell'operazione? In parole povere utilizziamo due fogli in Calc dove sul primo denominato "produzione" ci sono delle righe che descrivono le varie commesse con i dati di lavorazione. Quando l'operatore finisce quel determinato lavoro, clicca sul pulsante collegato alla macro che sposta l'intera riga selezionata (quindi c'è un problema di cella attiva perchè non sempre i lavori vengono ultimati sequenzialmente) e spostati (tagliati) sul secondo foglio denominato ""archivio" Eseguiti" nella riga 3 spostando verso il basso le righe già presenti e inserendo la data e l'ora dell'avvenuta operazione nella cella C3. Allego se può essere utile la macro originale in VBA. Premetto che hai fatto benissimo ad allegare il codice, purtroppo però in questo caso, il codice VBA è stato ottenuto mediante registratore di macro, contiene molte ripetizioni (c'è un copia/incolla effettuato sugli stessi dati per ben 3 volte) e parti apparentemente inutili. Non è una buona base di partenza perché richiederebbe un po di pulizia tenendo sottomano Excel per le varie prove. Io ho provato a decodificare StarBasic ma se devo essere sincero è abbastanza complicato e non di facile interpretazione. Detto francamente, ho grosse perplessità riguardo quanto affermi, comunque, bando alle ciance e veniamo al sodo. Provo a riepilogare quello che hai detto sperando di avere inteso bene tutto quanto: 0) situazione iniziale: == hai due tabelle: chiamiamole "produzione" e "archivio" L'utente è nella tabella "produzione", seleziona una cella che fa parte del record da spostare e clicca su un pulsante che aziona la macro. La macro a questo punto deve fare alcune cose 1) tabella "produzione": copiare i dati contenuti nella riga individuata dalla cella attiva 2) tabella "archivio": inserire una riga vuota nella posizione 3 incollare i valori precedentemente copiati inserire la data corrente nella cella C3 3) tabella "produzione": eliminare la riga contenente la cella selezionata La procedura che ho descritto ha un punto debole, ovvero: che succede se l'utente nella tabella "produzione" ha selezionato un range con più righe? e in caso di selezione multipla? Per questo motivo, io prima di procedere con le istruzioni successive farei controllino alla selezione. Ok ora vediamo come tradurre in codice l'algoritmo descritto. vedi codice alla fine di questo post NB: Il codice sotto riportato può potenzialmente causare perdita di dati o altri problemi e risultati imprevedibili. Sconsiglio vivamente l'utilizzo del codice a meno che non si sappia esattamente quello che si sta facendo. In ogni caso declino qualunque responsabilità. NB2: il codice è solo una proposta, dovrai adattarlo alle tue necessità. saluti Paolo Mantovani -8<- REM
Re: [utenti] conversione Macro Excel in Starbasic
Non ho parole sei un grande! Azzeccata in pieno la richiesta e funziona che è una meraviglia. Grazie infinite. Danilo. Paolo Mantovani ha scritto: Ciao Danilo, Nord Studio snc ha scritto: Buongiorno, mi chiamo Danilo. Abbiamo appena migrato il pacchetto Office verso OpenOffice ma ci stiamo imbattendo in un muro per quanto riguarda l'utilizzo di una macro per il nostro sistema di pianificazione settimanale. C'è qualcuno che ci può aiutare nell'operazione? In parole povere utilizziamo due fogli in Calc dove sul primo denominato "produzione" ci sono delle righe che descrivono le varie commesse con i dati di lavorazione. Quando l'operatore finisce quel determinato lavoro, clicca sul pulsante collegato alla macro che sposta l'intera riga selezionata (quindi c'è un problema di cella attiva perchè non sempre i lavori vengono ultimati sequenzialmente) e spostati (tagliati) sul secondo foglio denominato ""archivio" Eseguiti" nella riga 3 spostando verso il basso le righe già presenti e inserendo la data e l'ora dell'avvenuta operazione nella cella C3. Allego se può essere utile la macro originale in VBA. Premetto che hai fatto benissimo ad allegare il codice, purtroppo però in questo caso, il codice VBA è stato ottenuto mediante registratore di macro, contiene molte ripetizioni (c'è un copia/incolla effettuato sugli stessi dati per ben 3 volte) e parti apparentemente inutili. Non è una buona base di partenza perché richiederebbe un po di pulizia tenendo sottomano Excel per le varie prove. Io ho provato a decodificare StarBasic ma se devo essere sincero è abbastanza complicato e non di facile interpretazione. Detto francamente, ho grosse perplessità riguardo quanto affermi, comunque, bando alle ciance e veniamo al sodo. Provo a riepilogare quello che hai detto sperando di avere inteso bene tutto quanto: 0) situazione iniziale: == hai due tabelle: chiamiamole "produzione" e "archivio" L'utente è nella tabella "produzione", seleziona una cella che fa parte del record da spostare e clicca su un pulsante che aziona la macro. La macro a questo punto deve fare alcune cose 1) tabella "produzione": copiare i dati contenuti nella riga individuata dalla cella attiva 2) tabella "archivio": inserire una riga vuota nella posizione 3 incollare i valori precedentemente copiati inserire la data corrente nella cella C3 3) tabella "produzione": eliminare la riga contenente la cella selezionata La procedura che ho descritto ha un punto debole, ovvero: che succede se l'utente nella tabella "produzione" ha selezionato un range con più righe? e in caso di selezione multipla? Per questo motivo, io prima di procedere con le istruzioni successive farei controllino alla selezione. Ok ora vediamo come tradurre in codice l'algoritmo descritto. vedi codice alla fine di questo post NB: Il codice sotto riportato può potenzialmente causare perdita di dati o altri problemi e risultati imprevedibili. Sconsiglio vivamente l'utilizzo del codice a meno che non si sappia esattamente quello che si sta facendo. In ogni caso declino qualunque responsabilità. NB2: il codice è solo una proposta, dovrai adattarlo alle tue necessità. saluti Paolo Mantovani -8<- REM * BASIC * Sub Main 'inizializzamo alcune variabili oDoc = ThisComponent oSelection = oDoc.getCurrentSelection() oActiveSheet = oDoc.CurrentController.ActiveSheet oShProduzione = oDoc.Sheets.getByName("produzione") oShArchivio = oDoc.Sheets.getByName("archivio") 'sanity checks: If Not (oActiveSheet.Name = "produzione") Then sMsg = "Per lanciare la procedura occorre spostarsi " sMsg = sMsg & "sulla tabella ""produzione""" MsgBox sMsg, 64 Exit Sub End If If Not oSelection.supportsService("com.sun.star.sheet.SheetCell") Then sMsg = "Ce l'hai quasi fatta ma " sMsg = sMsg & "è necessario selezionare una sola cella" MsgBox sMsg, 64 Exit Sub End If 'ok se siamo arrivati fino a qui la selezione è a posto! 'individuo la riga contenente la cella attiva: iRowIndex = oSelection.CellAddress.Row 'ottengo il range da spostare (l'intera riga) oSrcRow = oShProduzione.Rows.getByIndex(iRowIndex) 'tabella "archivio": 'inserisco una riga vuota nella posizione 3 (ovvero indice 2) oShArchivio.Rows.insertByIndex(2, 1) 'incollare i valori contenuti nella riga selezionata 'della tabella archivio aDest = oShArchivio.getCellRangeByName("A3").CellAddress() aSrc = oSrcRow.RangeAddress() oShArchivio.copyRange(aDest, aSrc) 'inserire la data corrente nella cella C3 oShArchivio.getCellRangeByName("C3").FormulaLocal = Now() 'tabella "produzione": 'eliminare la riga contenente la cella selezionata oShProduzione.Rows.removeByIndex(iRowIndex, 1) End Sub - To unsubscribe, e-mail: utenti-unsubsc
Re: [utenti] conversione Macro Excel in Starbasic
Ciao Danilo, Nord Studio snc ha scritto: Buongiorno, mi chiamo Danilo. Abbiamo appena migrato il pacchetto Office verso OpenOffice ma ci stiamo imbattendo in un muro per quanto riguarda l'utilizzo di una macro per il nostro sistema di pianificazione settimanale. C'è qualcuno che ci può aiutare nell'operazione? In parole povere utilizziamo due fogli in Calc dove sul primo denominato "produzione" ci sono delle righe che descrivono le varie commesse con i dati di lavorazione. Quando l'operatore finisce quel determinato lavoro, clicca sul pulsante collegato alla macro che sposta l'intera riga selezionata (quindi c'è un problema di cella attiva perchè non sempre i lavori vengono ultimati sequenzialmente) e spostati (tagliati) sul secondo foglio denominato ""archivio" Eseguiti" nella riga 3 spostando verso il basso le righe già presenti e inserendo la data e l'ora dell'avvenuta operazione nella cella C3. Allego se può essere utile la macro originale in VBA. Premetto che hai fatto benissimo ad allegare il codice, purtroppo però in questo caso, il codice VBA è stato ottenuto mediante registratore di macro, contiene molte ripetizioni (c'è un copia/incolla effettuato sugli stessi dati per ben 3 volte) e parti apparentemente inutili. Non è una buona base di partenza perché richiederebbe un po di pulizia tenendo sottomano Excel per le varie prove. Io ho provato a decodificare StarBasic ma se devo essere sincero è abbastanza complicato e non di facile interpretazione. Detto francamente, ho grosse perplessità riguardo quanto affermi, comunque, bando alle ciance e veniamo al sodo. Provo a riepilogare quello che hai detto sperando di avere inteso bene tutto quanto: 0) situazione iniziale: == hai due tabelle: chiamiamole "produzione" e "archivio" L'utente è nella tabella "produzione", seleziona una cella che fa parte del record da spostare e clicca su un pulsante che aziona la macro. La macro a questo punto deve fare alcune cose 1) tabella "produzione": copiare i dati contenuti nella riga individuata dalla cella attiva 2) tabella "archivio": inserire una riga vuota nella posizione 3 incollare i valori precedentemente copiati inserire la data corrente nella cella C3 3) tabella "produzione": eliminare la riga contenente la cella selezionata La procedura che ho descritto ha un punto debole, ovvero: che succede se l'utente nella tabella "produzione" ha selezionato un range con più righe? e in caso di selezione multipla? Per questo motivo, io prima di procedere con le istruzioni successive farei controllino alla selezione. Ok ora vediamo come tradurre in codice l'algoritmo descritto. vedi codice alla fine di questo post NB: Il codice sotto riportato può potenzialmente causare perdita di dati o altri problemi e risultati imprevedibili. Sconsiglio vivamente l'utilizzo del codice a meno che non si sappia esattamente quello che si sta facendo. In ogni caso declino qualunque responsabilità. NB2: il codice è solo una proposta, dovrai adattarlo alle tue necessità. saluti Paolo Mantovani -8<- REM * BASIC * Sub Main 'inizializzamo alcune variabili oDoc = ThisComponent oSelection = oDoc.getCurrentSelection() oActiveSheet = oDoc.CurrentController.ActiveSheet oShProduzione = oDoc.Sheets.getByName("produzione") oShArchivio = oDoc.Sheets.getByName("archivio") 'sanity checks: If Not (oActiveSheet.Name = "produzione") Then sMsg = "Per lanciare la procedura occorre spostarsi " sMsg = sMsg & "sulla tabella ""produzione""" MsgBox sMsg, 64 Exit Sub End If If Not oSelection.supportsService("com.sun.star.sheet.SheetCell") Then sMsg = "Ce l'hai quasi fatta ma " sMsg = sMsg & "è necessario selezionare una sola cella" MsgBox sMsg, 64 Exit Sub End If 'ok se siamo arrivati fino a qui la selezione è a posto! 'individuo la riga contenente la cella attiva: iRowIndex = oSelection.CellAddress.Row 'ottengo il range da spostare (l'intera riga) oSrcRow = oShProduzione.Rows.getByIndex(iRowIndex) 'tabella "archivio": 'inserisco una riga vuota nella posizione 3 (ovvero indice 2) oShArchivio.Rows.insertByIndex(2, 1) 'incollare i valori contenuti nella riga selezionata 'della tabella archivio aDest = oShArchivio.getCellRangeByName("A3").CellAddress() aSrc = oSrcRow.RangeAddress() oShArchivio.copyRange(aDest, aSrc) 'inserire la data corrente nella cella C3 oShArchivio.getCellRangeByName("C3").FormulaLocal = Now() 'tabella "produzione": 'eliminare la riga contenente la cella selezionata oShProduzione.Rows.removeByIndex(iRowIndex, 1) End Sub - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org
[utenti] conversione Macro Excel in Starbasic
Buongiorno, mi chiamo Danilo. Abbiamo appena migrato il pacchetto Office verso OpenOffice ma ci stiamo imbattendo in un muro per quanto riguarda l'utilizzo di una macro per il nostro sistema di pianificazione settimanale. C'è qualcuno che ci può aiutare nell'operazione? In parole povere utilizziamo due fogli in Calc dove sul primo denominato "produzione" ci sono delle righe che descrivono le varie commesse con i dati di lavorazione. Quando l'operatore finisce quel determinato lavoro, clicca sul pulsante collegato alla macro che sposta l'intera riga selezionata (quindi c'è un problema di cella attiva perchè non sempre i lavori vengono ultimati sequenzialmente) e spostati (tagliati) sul secondo foglio denominato "Archivio Eseguiti" nella riga 3 spostando verso il basso le righe già presenti e inserendo la data e l'ora dell'avvenuta operazione nella cella C3. Allego se può essere utile la macro originale in VBA. Io ho provato a decodificare StarBasic ma se devo essere sincero è abbastanza complicato e non di facile interpretazione. Vi chiedo aiuto, grazie. Sub ESEGUITI() cella_base = ActiveCell.Address ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select ActiveCell.End(xlToRight).Select Range(cella_base, ActiveCell).Select 'Con Selezione.Interno ' .IndiceColore = 22 ' .Motivo = xlContinuo ' Fine Con Sheets("Produzione").Select Selection.Copy Sheets("Archivio Eseguiti").Select Range("a3").Select Selection.Insert Shift:=xlDown Range("a3").Select ActiveSheet.Paste Sheets("Archivio Eseguiti").Select Range("C3").Select ActiveCell.FormulaR1C1 = Now Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("a3").Select Sheets("Produzione").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp Sheets("Archivio Eseguiti").Select Range("a3").Select Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Sheets("Produzione").Select Range("A1").Select Windows("000aaa.XLS").Activate ActiveWorkbook.Close End Sub - To unsubscribe, e-mail: utenti-unsubscr...@it.openoffice.org For additional commands, e-mail: utenti-h...@it.openoffice.org