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
[email protected] 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/[email protected]/msg01125.html
http://www.mail-archive.com/[email protected]/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
consentono una codifica più snella ed efficiente, come hai potuto vedere
nella macro che ti ho passato e come vedrai consultando il manuale e gli
altri documenti che ti ho indicato.
ciao
Paolo Mantovani
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]