Fabio ha scritto:
Magari a delle Function "monolitiche" da richiamare dalle Sub Princpali
(o più banalmente da inserire con cut/paste all'interno del codice...)
Questi esempi (se non fossero in tedesco) si avvicinano a quello che
intendevo...
http://www.dannenhoefer.de/faqstarbasic/Tabellen(Starcalc).html#Zweig95
ho cercato più che altro di farti capire quello che intendevo
spiegandoti come si usa, altrimenti:
1) non impari mai
Io faccio l'architetto, e devo produrre computi metrici... imparare a
programmare ad alto livello è un'attività che vorrei (causa limiti di
età e di pazienza) ridurre al minimo! :-)
2) ricicli pezzi di cui non comprendi appieno il funzionamento
Probabilmente ci sono zone di starbasic che nemmeno la loro "mamma"
riesce a comprendere appieno... :-)
3) continuerebbe a tossicchiare l'applicativo :-)
Lascialo tossire... io devo fare delle case al giusto prezzo, non del
codice elegante....
Come ti dicevo, quell'applicativo in VB tossisce, scatarra, si avvita su
se stesso, barcolla..... ma FUNZIONA!
Quell'applicativo ha lo scopo di aiutare l'utente a gestire computi
metrici ed è proprio quell'applicativo che vorrei tradurre in Starbasic.
E poi - diciamo la verità - una function "usabile" non fa schifo neppure
ad un programmatore vero... :-)
********** Quindi mi serve una mano !!!! *******
vediamo quello che si può fare, certo non posso prometterti nulla.
Cercherò di fare quel che posso.
GRAZIE! Un buon modo sarebbe non perdere di vista i problemi che
sottopongo... perché spesso si legge una mail, non si ha tempo in quel
momento, e la si dimentica...
Quindi segna in rosso i mex... e aspetta l'ispirazione... se e quando
verrà sarà la benvenuta! :-)
[...]
OK, ma se voglio individuare la cella usando un NOME di area?
Cell = Sheet.getCellByname("Area_uno") ' così 'ovviamente' non
funziona...
Come si potrebbe fare?
getCellRangeByName
Le ho provate tutte (perchè ho fiducia... :-) ) anche le più improbabili...
getCellRangeByName("area5")
getCellRangeByName(area5)
getCellRangeByName.area5 :-)
Ma non funzionano... perchè getCellRangeByName vuole delle coordinate da
"battaglia navale", e non dei nomi...
Ma forse non ci siamo capiti... io intendevo un range (ma una sola cella
dovrebbe essere la stessa cosa) definito con un nome...
(menu > inserisci > nomi....)
Mi potresti postare la riga di codice completa?
stai però di nuovo usando il copia, nessuno ti vieta di farlo,
Non è detto... di questi tempi...
io di
solito non lo faccio perchè avendo il dato in una variabile posso farci
sopra operazioni prima di riscriverlo
Nel mio applicativo non VOGLIO manipolare nulla da starbasic.
E' una scelta precisa... praticamente tutto viene fatto nelle celle con
funzioni di calc, alla luce del sole... dove chiunque (per motivi
diversi) può sempre intervenire a manina.
Questo è in generale un bel problema!
Spesso non so (non posso e non voglio) sapere che tipo di dati contiene
la cella...
Se la copio e la incollo non me ne devo preoccupare... :-)
Potremmo impostare un complesso codice che vada a leggere il tipo di
contenuto etc.... ma direi che è più facile (e leggero per la CPU)
andarci "fisicamente", copiare, tornare e incollare dove serve.
Conosci qualche altro modo?
aspetta, puoi semplicemente analizzare il contenuto della cella e
comportarti di conseguenza. C'è un esempio bello e pronto sul manuale di
starbasic di sun in italiano.
Select Case Cell.Type
Case com.sun.star.table.CellContentType.EMPTY
MsgBox "Contenuto: vuoto"
Case com.sun.star.table.CellContentType.VALUE
MsgBox "Contenuto: valore"
Case com.sun.star.table.CellContentType.TEXT
MsgBox "Contenuto: testo"
Case com.sun.star.table.CellContentType.FORMULA
MsgBox "Contenuto: formula"
End Select
Appunto! Si tratta di quel "complesso codice" che dicevo sopra...
Dubito assai che sia "conveniente"... anche perchè in un applicativo
come questo la lunghezza del codice è una zavorra che ti porti dietro
sempre (escludo di inserirla come "libreria condivisa... ci sono già
abbastanza problemi di "portabilità")
Se ho un range su una tabella e lo devo copiare su un'altra... mi sembra
così semplice copiarlo da "la" e incollarlo "qua"!
L'economia c'è se evito di "attivare" il range da copiare..... ovvero
quando evito di andarci "fisicamente".
Se io sono l'utente, sono su una cella (la cella attiva), decido che
voglio (ad esempio) inserire una nuova voce e pigio un pulsante.
L'applicativo a quel punto si deve preoccupare di copiare in quella riga
(quella della cella attiva) un range che sta da un'altra parte...
Ma siccome l'applicativo sa dove si trova quel range
(range_definito_da_un_nome) non è necessario andare a visualizzarlo...
serve incollarlo nella riga attiva e basta.
E l'utente lo vede apparire come per magia... :-)
In VB bastava:
Sheets("servizio1").Range("serv_gen1").Copy ' copia senza andarci
Selection.Insert Shift:=xlDown 'incolla spingendo in basso le righe
Ti assicuro che su di un computo con 500 voci il risparmo di click e di
attenzione per l'utente sono già enormi... e lasciamo che CPU lavori un
po'....
Quello che ti sconsiglio è il cambio di formato di variabile fatto fare
varie volte automaticamente all'interprete basic, ...cut..
Mai pensato di fare una cosa del genere... come ti dicevo qualsiasi
manipolazione deve essere (possibilmente) in chiaro nelle celle, e
realizzata con le normali funzioni di calc...
Può succedere (e succede) che qualcosa non funzioni nel codice
starbasic, oppure che il Computo metrico debba essere manipolato per
adattarlo alla specifica (e urgente) necessità... e questo sempre nelle
ore prima dell'alba... la notte prima della consegna!
Intendo dire che si tratta di un applicativo di aiuto per un utente
esperto di Tabelle Elettroniche e di Computi Metrici, non per un
programmatore...
Naturalmente ti ho postato un piccolo esempio di come leggere e
scrivere singole celle ma puoi farlo con range di celle,
richiamandoli per posizione o per nome (getCellRangeByName)
Anche qui non ho risolto... perché non ho ancora capito come registrare
un range in una variabile, e che tipo di dati contiene un range
(dovrebbe essere un Object...)
Ti incollo il codice riportato sempre sul manuale di starbasic
Non era esattamente quello di cui stavamo parlando... ma è in qualche
modo attinente... :-)
Conosco bene quella parte del manuale... e quella routine l'avevo già
utilizzata per tentare di risolvere...
Avevo anche postato un paio di mex che evidentemente ti sono sfuggiti... :-)
http://www.google.it/search?as_q=aimar&num=10&hl=it&btnG=Cerca+con+Google&as_epq=copiare+una+riga&as_oq=&as_eq=&lr=lang_it&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=&safe=images
Dagli un'occhiata... ci leggiamo lì!
ciao e grazie
Bart
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]