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/30 15:28:13 UTC

[utenti-it] Funzione Sort che non Ordina (era: Assegnare una macro all'evento del foglio via Basic)

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