sub OrdinaCrescenteColonnaPosizioneCursore
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
rem Numero della colonna della cella selezionata all'attivazione della Macro
NumeroColonna = ThisComponent.getCurrentSelection.cellAddress.Column + 1 ' 2
rem ----------------------------------------------------------------------
dim args1(7) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ByRows"
args1(0).Value = true
args1(1).Name = "HasHeader"
args1(1).Value = false
args1(2).Name = "CaseSensitive"
args1(2).Value = false
args1(3).Name = "NaturalSort"
args1(3).Value = false
args1(4).Name = "IncludeAttribs"
args1(4).Value = true
args1(5).Name = "UserDefIndex"
args1(5).Value = 0
args1(6).Name = "Col1"
args1(6).Value = NumeroColonna ' Numero della colonna della cella selezionata all'attivazione della Macro
args1(7).Name = "Ascending1"
args1(7).Value = true
dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$D$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$B$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
end sub
ma non sono riuscito ad adattare alla mia necessità
Il file iniziale è composto da 3 colonne
- se in E1 c'è 1 ordina le colonne in base alla colonna A
- se in E1 c'è 2 ordina le colonne in base alla colonna B
- se in E1 c'è 3 ordina le colonne in base alla colonna C
Comè scritto adesso il codice ordina solo in base alla colonna C
Spero di essere stato chiaro, perchè un'altro file file non saprei come impostarlo
Sub OrdinaDati
dim I,lastCol as integer
Dim oSheetDSC As Object, oDSCRange As Object
Dim aSortFields(0) As New com.sun.star.util.SortField
Dim aSortDesc(0) As New com.sun.star.beans.PropertyValue
oSheet = ThisComponent.CurrentController.ActiveSheet
c = oSheet.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow
lastCol = 2 ' col C
ordCol = oSheet.getCellRangeByName("E1").Value - 1
oDSCRange = oSheet.getCellRangeByPosition(0,1, lastCol,LastRow) ' range da ordinare
ThisComponent.getCurrentController.select(oDSCRange)
aSortFields(0).Field = ordCol
aSortFields(0).SortAscending = TRUE 'ordine crescente, se si vogliono i dati in ordine decrescente inserire FALSE
aSortDesc(0).Name = "SortFields"
aSortDesc(0).Value = aSortFields()
oDSCRange.Sort(aSortDesc())
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Rileggendo il thread, mi sono reso conto che il titolo non è proprio corretto
infatti la mia richiesta era di ordinare le righe del range in base al valore scritto in E1 (riferito alle colonne interessate)