Il 18/04/2012 19:17, [email protected] ha scritto:
> Posto di qua dato che in ML Libò l'argomento è fermo ma credo possa
> interessare
> sia come soluzione che come eventuale stimolo :-)
>
> Avevo postato questo:
> %
> Ci deve essere sicuramente una soluzione semplice ma proprio non mi viene...
> E' possibile utilizzare un SE per riempire o una terza o una quarta cella?
> In pratica, SBAGLIANDO la sintassi ma seguendo la logica mi occorrerebbe avere
> una formula del tipo:
> SE(A1>5; C1="XXXX";D1="XXXX") [leggendola: se a1 è maggiore di 5 allora metti
> in c1 le x, se no metti in d1 le x] (ovviamente il tutto, celle valori segni
> e
> compreso la formula SE, sono per pura indicazione del processo logico e non
> materialmente dei vincoli)
> Esempio per spiegare cosa vorrei ottenere:
> A1 è la cella discriminante (dove immettere il carattere che fa da
> spartiacque)
> B1 continene il SE che deve spostare l'eventuale segno di spunta tra C1 e D1
> C1 cella di destinazione
> D1 cella di destinazione
>
> Ovviamente le celle C1 e D1 non possono contenere ne formule ne altro dato
> che
> quella delle due non contenente le XXX dell'esempio dovrà essere scritta in
> seguito, con dati successivi.
> Piccola altra complicazione: non posso usare la formattazione condizionata
> dato che questa diviene attiva DOPO che si è inserito qualcosa nella cella,
> mentre mi occorre che una delle due celle contenga il segno di eliminazione
> PRIMA di qualsivoglia digitazione. (Ovvero se ad esempio uso formattazione
> condizionata rosso e doppio barrato i caratteri del dato diverranno rossi e
> doppiobarrati DOPO che nella cella C1 sono stati scritti e si sia premuto
> invio
> ma a me occorre che quella cella sia interdetta o bloccata in qualche modo o
> già riempita con delle XXX PRIMA che perdano tempo a scriverci per poi
> accorgersi di aver sbagliato, cancellare e riscrivere nelle celle giuste)
>
> Il SE computa il risultato nella sua cella, ovvero restituisce il risultato
> nella cella dov'è inserita la formula, come si fa a fargli puntare ad un'altra
> casella, ovvero a fargli inserire i risultati in una casella terza??
> %
>
> unica risposta
> %
>> Io farei così:
>> In A1 metti il valore che vuoi, purché sia un numero.
>> In C1 scrivi SE(A1>5;"x";"")
>> In D1 scrivi SE(A1<=5;"x";"")
>> Non userei B1.
>> La doppia virgoletta ti lascia la cella vuota.
>
> No, è già fatto a questa maniera e non va bene, le celle c1 e d1 DEVONO
> restare vuote dato che chi compilerà il modulo altrimenti sovrascriverà i SE
> che contengono!
> Ho usato l'escamotage di fare il modulo originale in OTS (modello) in modo
> che
> aprano dei nuovi moduli di volta in volta, quindi riproducendo ogni volta la
> situazione originale, senza caselle con le formule sovrascritte ma non c'è
> verso, le ragazze
> mi creano casini compilando i moduli successivi utilizzando il precedente già
> fatto anzichè aprendone uno nuovo e quindi nelle celle che contenevano il SE
> alla volta successiva non c'è piùla formula dato che sonos tati inseriti i
> dati
> e si scombina tutto il resto dei dati....
>
> In pratica devo far compilare un elenco complesso e a seconda di cosa viene
> scritto in alcune determinate celle una serie di altre devono essere
> immediatamente riempite con delle X o interdette in modo da risultare A VISTA
> non scrivibili, mentre delle altre resteranno vuote quindi riempibili con i
> dati necessari. In questo modo prevengo gli errori e sopratutto non devo
> andarmi a ricontrollare tutti i sacrosanti dati uno per uno visto che sono
> una
> sfliza di valori e li sbagliano praticamente sempre...
>
> Nel caso non se ne venga a capo con semplici formule proverò a farmi una
> macro
> ad hoc... anche se volevo evitare macro e sopratutto pensavo esistesse la
> possibilità di andare a modificare un valore in una cella terza anzichè per
> forza limitarsi alla combinazione cellaorigineformula=cellarisultatofinale:
> tutte le formule restituiscono il controvalore nelle celle in cui sono
> scritte...
> %
>
> Ho risolto (per modo di dire) così: ho creato una serie di campi formattati
> con la barra formulario associando ad ognuno di questi la serie di macro
> necessarie a riempire o meno le celle finali.
> Ma è un pasticcio e non mi piace come soluzione.
> Quindi pongo un ulteriore questione: è possibile bloccare una cella
> nascondendola o comunque impedendone la scrittura se in una determinata altra
> avviene qualcosa?
> Esempio:
> A1 vuota
> A2 vuota
> A3 vuota
> Scrivo 1 in A1 ed alla pressione del tasto invio il cursore si porta in A2
> Scrivo 3 in A1 ed alla pressione del tasto invio il cursore si porta in A3
> saltando A2 dato che 3 è il numero scelto come discriminante.
>
> Lo so che propongo cose di non semplice soluzione ma vedetela così: è un
> pungolo a sbirciare da nuovi punti di vista :-)
>
> Grazie per la pazienza di aver letto sta lunghissima mail
> Angelo
>
> ---------------------------------------------------------------------
> Per cancellarsi: [email protected]
> Per informazioni: http://www.openoffice.org/it/
> Per avviare una nuova discussione: [email protected]
> Archivi: http://mail-archives.apache.org/mod_mbox/incubator-ooo-utenti-it
>
Ciao,
se decidi di abbandonare le formule (te lo consiglio!) puoi provare con
le macro!
Ti mando un esempio che utilizza un event listner.
Vedi se fa al caso tuo:
Attenzione alle righe di codice spezzate x motivi di spazio!
Global oListener, oSheet, oCell
Sub AddListenerA1
oSheet = ThisComponent.getSheets().getByName("Foglio1")
oCell = oSheet.getCellRangeByName("A1")
oListener = CreateUnoListener("OOO_",
"com.sun.star.chart.XChartDataChangeEventListener")
oCell.addChartDataChangeEventListener(oListener)
End Sub
Sub OOO_chartDataChanged
Dim aCellProtection As New com.sun.star.util.CellProtection
oCellToLock = oSheet.getCellRangeByName("F1") 'La cella da proteggere è
F1
If oCell.getValue() > 5 Then
oSheet.getCellRangeByName("C1").String = "XXXX"
aCellProtection.IsLocked = true
oCellToLock.CellProtection = aCellProtection
Else
oSheet.getCellRangeByName("D1").String = "XXXX"
End If
End Sub
Sub RemoveListnerA1
oCell.removeChartDataChangeEventListener(oListener)
End Sub
Il funzionamento è semplice, esegui AddListnerA1 e poi prova a inserire
un valore in A1.
Se il valore inserito è maggiore di 5 scrive in C1 e blocca F1,
altrimenti scrive in D1.
Dovrebbe essere più o meno quello che ti serviva...
---------------------------------------------------------------------
Per cancellarsi: [email protected]
Per informazioni: http://www.openoffice.org/it/
Per avviare una nuova discussione: [email protected]
Archivi: http://mail-archives.apache.org/mod_mbox/incubator-ooo-utenti-it