Alle 01:07, marted� 15 marzo 2005, Wile E. Coyote ha scritto: > Ciao > alla mia prima per quanto riguarda l'aggiornamento dei calcoli ho per > adesso sopperito aggiungendo due pulsanti che aprono il foglio 1 e 2. Il > primo foglio � la classica battaglia navale il foglio � diviso in due > aree dove dicevo inserisco le inziali, poi tramite una funzione nel > secondo e terzo foglio una volta scelta una riga tramite una combo i > dati riguardanti la persona vengono caricati e quindi trasformati e > trascritti in una nuova colonna, posto la function : > Function trasforma (dato as String) as String' as String'Controllo [...] > End Function
Per quanto riguarda questa funzione, non mi pare che sia particolarmente critica, in quanto, a dispetto della lunghezza, le righe di codice effettivamente eseguite sono 3 o 4 Pertanto, non mi spiego la lentezza di cui hai riferito. A meno che la funzione TRASFORMA() non sia utilizzata in migliaia di celle. che mi dici? Se cosi fosse, considera anche che la funzione TRASFORMA() che hai scritto non fa nulla che non possa essere fatto con un CERCA.VERT(), magari combinato con altre funzioni. Dato che le funzioni native di Calc (come CRECA.VERT ad esempio) sono implementate in C++ perci� � chiaro che girano molto pi� velocemente di qualunque cosa tu possa scrivere in OOBasic. Se veramente il problema viene dalle funzioni implementate in OOBasic io comincerei a pensare ad una sostituzione con funzioni "native". Inoltre Calc ha un sacco di funzioni cosiddette "Database" che sembrerebbero indicate per le cose che stai facendo. Parlando di OOBasic invece, ti suggerisco di usare Select Case anzich� If...Then...ElseIf... (dove possibile ovviamente) in quanto la codifica risulter� molto pi� compatta e leggibile. Esempio: REM ***** BASIC ***** Function Trasforma (Dato As Variant) As String If IsNumeric(Dato) Then Select Case Dato Case 0 : Trasforma = " " Case Is > 0 : Trasforma = "Straordinario" Case Is < 0 : Trasforma = "Anticipo" End Select Else Select Case UCase(Dato) Case = "IS" : Trasforma = "Isaia" Case "G" : Trasforma = "Giovanni" Case "R" : Trasforma = "Rododendro" Case "F" : Trasforma = "Festivo" Case "LO" : Trasforma = "Loren" Case "L937" : Trasforma = "L. 937/77" Case "LS" : Trasforma = "Lo so" Case "GMF" : Trasforma = "SA. GMF" Case "CT" : Trasforma = "Cure termali" Case "RD" : Trasforma = "Riposo" Case "RC" : Trasforma = "Ricovero" Case "LT" : Trasforma = "Latina" Case "LC" : Trasforma = "Leoncino" Case "TI" : Trasforma = "Timperi" Case "MS" : Trasforma = "Milde sorte" Case "X" : Trasforma = "x-file" Case "TR" : Trasforma = "Trans europe express" Case "LM" : Trasforma = "Limonge" 'Case "CO" : Trasforma = "Comandi" Case Else : Trasforma = "Dato errato" End Select End If End Function In generale, spesso conviene gestire questo tipo di cose con degli array (o liste o dizionari ecc. per i linguaggi che le supportano) > Le due aree sono create da inserisci-->nomi-->definisci e vengono > ricavate dall'indice della combo e della colonna che viene inserito con > la funzione INDICE(AREA;RIGA;COLONNA). Comunque nei fogli 2 e 3 poi a > seconda del dato trasformato vengono effettuati svariati calcoli con > formule e controlli condizionali 36 colonne x 81 righe x 2 fogli, penso > sia solo una questione di avvio iniziale , in quanto una volta poi > aggiornato il calcolo il programma va spedito, per poi rallentare all' > apertura del foglio 3, a meno che non sia un problema con la funzione > indice. A che tipo di problema stai pensando? > Il mio quesito per quanto riguarda la lista era per un'altra sub > nel foglio 2 e 3 . Che scrive deglio orari in base alla presenza di > alcuni script in 2 celle , quindi una volta controllate le condizioni > scrive in altre celle, visto che le stringhe da controllare erano tante > volevo sapere se era possibile inserirle in un'unica lista per poi fare > il controllo all'interno, non posto la funzione perch� penso che > prenderei pi� di 150 righe, comunque si tratta sempre di controlli IF , > ma quelli rallentano il programma solo quando li avvio sempre tramite > pulsante quindi � contemplato E comunque ti consiglio di riscrivere il tutto usando Select Case, ci guedagnerai in chiarezza se non in velocit�. > , spero di essere stato chiaro il > programma � molto vasto , controlla gli orari di ingresso ed uscita di > persone ed in base al lavoro svolto calcola straordinari e compensi . Chiaro per quanto possibile. Ho capito che il foglio � molto complesso ed � difficile capire dove sta il collo di bottiglia. Cmq non riesco a capire perch� volevi collegare delle macro all'evento "sheet_activate" (non esiste questo evento in Calc, ma � tanto per capirci meglio) Ovviamente, se pensi che ti serva 'sta cosa sono sempre disposto a passarti il codice. Concludendo: Se il file non contiene dati sensibili potresti metterlo on line da qualche parte e, anche se non posso garantire nulla, gli dar� senz'altro un occhiata. ciao Paolo Mantovani --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
