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]

Rispondere a