You are viewing a plain text version of this content. The canonical link for it is here.
Posted to utenti-it@openoffice.apache.org by gurxs <gu...@yahoo.it> on 2014/06/26 16:30:55 UTC
[utenti-it] Assegnare una macro all'evento del foglio via Basic
Buongiorno a tutti,
sto preparando un cockpit in Calc per eseguire alcuni controlli
automatici sulla gestione di Errori.
Fin'ora me la sono cavata abbastanza bene con Basic, ma adesso mi sono
arenato su questo problema e spero che qualcuno di voi abbia e/o sappia
aiutarmi a risolverlo.
Quando l'utente inserisce un titolo nel foglio "Generale", ho fatto una
macro che, in modo automatico, vada ad aprire un nuovo foglio di calcolo
e lo popola con le formule necessarie, inoltre crea una specie di
tabella (Rating).
Questa tabella è fatta in questo modo: le prime 3 colonne e le prime N
righe del foglio contengono valori e/o formule.
Questo Range di elementi li ho anche inseriti in un DatabaseNameRange.
Vorrei "Sortare" questo NamedRange ogni volta che una qualsiasi cella
del foglio viene modificata.
via Gui, questo lo ottengo cliccando con il tasto destro sul nome del
foglio, quindi vado su
Eventi foglio --> Contenuto Modificato clicco su Macro e scelgo la
Subroutine che mi interessa far girare.
Fatta a mano, funziona, ma (poiché il foglio nasce ad un preciso evento)
vorrei fare questa assegnazione via Basic.
Qualcuno ha idea di come potrei fare e / o dove posso trovare questa info ?
Grazie
AS
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
http://www.avast.com
---------------------------------------------------------------------
To unsubscribe, e-mail: utenti-it-unsubscribe@openoffice.apache.org
For additional commands, e-mail: utenti-it-help@openoffice.apache.org
[utenti-it] Funzione Sort che non Ordina (era: Assegnare una macro all'evento
del foglio via Basic)
Posted by gurxs <gu...@yahoo.it>.
Ciao a tutti,
dopo giorni di ricerche su internet che non hanno portato a nulla e
nessuna risposta alla mail precedente, ho deciso di fare un workaround
al problema.
La soluzione che tento di attuare è la seguente.
Quando, la macro che rileva un nuovo titolo, crea il nuovo foglio e
carica dati e tabella,
aggiunge nella prima cella della colonna successiva alla tabella la funzione
ORSheet.getCellByPosition(ORCol + 1, 0).Formula =
"=FSORTRATINGS(""ORRATINGS"")"
La funzione
Public Function FSORTRATINGS(wRange as Variant)
SortRatings()
FSORTRATINGS = "Sorted"
End Function
chiama la subroutine di Sort (presa da internet e modificata)
Sub SortRatings()
Dim oSheet ' Calc sheet containing data to sort.
Dim oCellRange ' Data range to sort.
REM An array of sort fields determines the columns that are
REM sorted. This is an array with two elements, 0 and 1.
REM To sort on only one column, use:
REM Dim oSortFields(0) As New com.sun.star.util.SortField
Dim oSortFields(1) As New com.sun.star.util.SortField
REM The sort descriptor is an array of properties.
REM The primary property contains the sort fields.
Dim oSortDesc(0) As New com.sun.star.beans.PropertyValue
REM Get the sheet named "Sheet1"
oSheet = ThisComponent.Sheets.getByName("Orders")
REM Get the cell range to sort
oCellRange = oSheet.getCellRangeByName("ORRATINGS")
REM Select the range to sort.
REM The only purpose would be to emphasize the sorted data.
'ThisComponent.getCurrentController.select(oCellRange)
REM The columns are numbered starting with 0, so
REM column A is 0, column B is 1, etc.
REM Sort column B (column 1) descending.
oSortFields(0).Field = 1
oSortFields(0).SortAscending = True
REM If column B has two cells with the same value,
REM then use column A ascending to decide the order.
oSortFields(1).Field = 0
oSortFields(1).SortAscending = True
REM Setup the sort descriptor.
oSortDesc(0).Name = "SortFields"
oSortDesc(0).Value = oSortFields()
REM Sort the range.
oCellRange.Sort(oSortDesc())
End Sub
Credevo, con questa soluzione, di aver fatto una furbata, invece non
funziona, nel senso che la routine non si innesca.
Ho provato a mettere dei MSGBOX per verificare, ma non arriva mai a
lanciare la sub.
Sareste così gentili da dirmi cosa sbaglio ?
Grazie
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
http://www.avast.com
---------------------------------------------------------------------
To unsubscribe, e-mail: utenti-it-unsubscribe@openoffice.apache.org
For additional commands, e-mail: utenti-it-help@openoffice.apache.org
Re: [utenti-it] Assegnare una macro all'evento del foglio via Basic
Posted by Cesare Spaziani <ce...@gmail.com>.
Ciao,
per gestire gli eventi da macro puoi procedere in due modi.
1. assegnando una sub-routine all'evento:
Sub SetDocEvent()
Dim oSheet
Dim mEvt(1) as New com.sun.star.beans.PropertyValue
oSheet = ThisComponent.getCurrentController.ActiveSheet
mEvt(0).Name = "EventType"
mEvt(0).Value= "Script"
mEvt(1).Name = "Script"
mEvt(1).Value
="vnd.sun.star.script:Standard.Module1.TestEventChange?language=Basic&location=application"
oSheet.getEvents().replaceByName("OnChange", mEvt())
End Sub
Sub TestEventChange
Msgbox("Test")
End Sub
2. utilizzando gli event listner:
Global oSheet, oRange, oListener
Sub AddListener
oSheet = ThisComponent.getCurrentController.ActiveSheet
oRange = oSheet.getCellRangeByName("A1:B2")
oListener = CreateUnoListener("Test_",
"com.sun.star.chart.XChartDataChangeEventListener")
oRange.addChartDataChangeEventListener(oListener)
End Sub
Sub Test_chartDataChanged
MsgBox("Test")
End Sub
Sub RemoveListner
oRange.removeChartDataChangeEventListener(oListener)
End Sub
Il primo metodo è del tutto equivalente all'assegnazione che fai via GUI.
Il secondo permette di attivare più listener sullo stesso foglio su
range diversi, e quindi è utile per gestire situazioni più complicate.
C.
Il 26/06/2014 16:30, gurxs ha scritto:
> Buongiorno a tutti,
>
> sto preparando un cockpit in Calc per eseguire alcuni controlli
> automatici sulla gestione di Errori.
>
> Fin'ora me la sono cavata abbastanza bene con Basic, ma adesso mi sono
> arenato su questo problema e spero che qualcuno di voi abbia e/o
> sappia aiutarmi a risolverlo.
>
> Quando l'utente inserisce un titolo nel foglio "Generale", ho fatto
> una macro che, in modo automatico, vada ad aprire un nuovo foglio di
> calcolo e lo popola con le formule necessarie, inoltre crea una specie
> di tabella (Rating).
>
> Questa tabella è fatta in questo modo: le prime 3 colonne e le prime N
> righe del foglio contengono valori e/o formule.
> Questo Range di elementi li ho anche inseriti in un DatabaseNameRange.
> Vorrei "Sortare" questo NamedRange ogni volta che una qualsiasi cella
> del foglio viene modificata.
>
> via Gui, questo lo ottengo cliccando con il tasto destro sul nome del
> foglio, quindi vado su
> Eventi foglio --> Contenuto Modificato clicco su Macro e scelgo la
> Subroutine che mi interessa far girare.
>
> Fatta a mano, funziona, ma (poiché il foglio nasce ad un preciso
> evento) vorrei fare questa assegnazione via Basic.
>
> Qualcuno ha idea di come potrei fare e / o dove posso trovare questa
> info ?
>
> Grazie
> AS
>
>
> ---
> Questa e-mail è priva di virus e malware perché è attiva la protezione
> avast! Antivirus.
> http://www.avast.com
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: utenti-it-unsubscribe@openoffice.apache.org
> For additional commands, e-mail: utenti-it-help@openoffice.apache.org
>