[RISOLT]modifica cella: come intercettare l' evento, avviare

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Cash1972
Messaggi: 4
Iscritto il: lunedì 29 ottobre 2012, 9:24

[RISOLT]modifica cella: come intercettare l' evento, avviare

Messaggio da Cash1972 »

:D :D Salve a tutto il forum / community.

Sebbene siano 2 anni che ho sposato OOo al posto del buon vecchio Ms Office mi iscrivo solo ora al forum sul quale per altro ho già trovato numerose ed utili informazioni soprattutto sulle macro.

Ho iniziato ad adoperarle solo per gestire aspetti complessi di un file Calc che sta diventando complicato e ricco di funzioni e questo dove le formule e le funzioni non possono arrivare. Il problema di cui non vengo a capo è come gestire un evento su singole celle. Devo poter individuare la modifica di una cella, C69, al verificarsi della quale viene ricalcolato il contenuto della C70, la cui modifica comporta il ricalcolo di C71. Questo non può essere fatto in automatico in quanto queste celle non hanno rferimenti tra loro. Vengono gestite come "Dati / Validità" e caricate tramite Procedure in Basic.

Grazie a chiunque sappia aiutarmi. ;)
Ultima modifica di Cash1972 il giovedì 1 novembre 2012, 21:53, modificato 1 volta in totale.
OOo 3.4, Windows 7
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: modifica cella: come intercettare l' evento, avviare mac

Messaggio da vladko »

chi modifica C69?

immagino servirà un bottone
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
c.spaziani
Messaggi: 21
Iscritto il: lunedì 16 gennaio 2012, 12:48

Re: modifica cella: come intercettare l' evento, avviare mac

Messaggio da c.spaziani »

Ciao,
puoi usare un event listner:

Codice: Seleziona tutto

Global oListener, oSheet, oCell

Sub AddListener
	oSheet = ThisComponent.getSheets().getByName("Foglio1")
	oCell = oSheet.getCellRangeByName("C69")
	oListener = CreateUnoListener("C69_", "com.sun.star.chart.XChartDataChangeEventListener")
	oCell.addChartDataChangeEventListener(oListener)
End Sub

Sub C69_chartDataChanged
	oSheet.getCellRangeByName("C70").String = "XXXX"
End Sub

Sub RemoveListner
	oCell.removeChartDataChangeEventListener(oListener)
End Sub
Dopo aver eseguito AddListener, tutte le modifiche alla cella C69 saranno intercettate e verrà eseguita la Sub C69_chartDataChanged.
OpenOffice 3.4.1
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
Cash1972
Messaggi: 4
Iscritto il: lunedì 29 ottobre 2012, 9:24

[RISOLTO]Re: modifica cella: come intercettare l' evento,

Messaggio da Cash1972 »

Salve ragazzi, :D :D

scusate se rispondo con così tanto ritardo.

Per vladko. La cella viene modificata dall' utente secondo un range di validità contenente 4 stringhe fisse. In base a quella scelta viene fatta una ricerca in un altro foglio per proporre un' ulteriore dettaglio di scelta. In sostanza si cerca un valore a cascata. Ecco perchè in base a C69 devono essere presentati solo alcuni valori e questo ovviamente in automatico. La scelta di un bottone con collegato il lancio di un filtro è la prima versione, ma risulta poco elegante.

Per Spaziani. Ho provato e dai primi test sembra funzionare. Non nascondo che leggendo la guida di Pitoniak e sfogliando questo forum avevo pensato proprio a listner e broadcaster. Ma la loro implementazione mi sembrava alquanto oscura. :crazy: Certo adesso la vedo molto più semplice. Anzì approfitto per chiederti se conosci qualche guida che spieghi meglio ( cioè in maniera semplice ) la gestione degli eventi. Premetto che ho studiato informatica a scuola ( 20 anni fà con Pascal e Cobol ) quando i sistemi Windows ed in generale "event driven" non c' erano. Morale ho deciso di imparare OOo Basic almeno nella misura in cui semplifica il mio foglio di Calc. Questo anche perchè dopo 2 anni che uso OpenOffice non rimpiango assolutamente Microsoft Office, nemmeno Excel con cui ho realizzato parecchi lavori.

Di nuovo grazie a tutti per la Vs. disponibilità e competenza :bravo: :super:
OOo 3.4, Windows 7
Rispondi