Posílám 2 makra. Jsou postavena tak aby pomohla pochopit nastavování parametrů. Doporučuji otestovat sloupec se smíšenými daty na úseku A1:C5 a nejprve setřídit tím jednoduchým makrem. Nejprve si to ale z úseku A1:C5 ještě jednou nebo vícekrát vykopírujte do úseku - například A10:C15, nebo si tam dejte nějaká další data.
Sub TriditUsek_3sl_jednoduche
Dim oSheet
Dim oCellRange
REM Pole třídění polí určuje sloupce, které jsou
REM řazeny. Jedná se o pole s dvěma prvky, 0 a 1.
REM Pro řazení pouze jednoho sloupce, použijte:
REM Dim SortFields (0) As New com.sun.star.util.SortField
Dim oSortFields(1) As New com.sun.star.util.SortField
REM Parametry (argumenty) deskriptoru.
REM Primární vlastnost obsahuje třídění pole.
Dim oSortDesc(0) As New com.sun.star.beans.PropertyValue
oSheet = ThisComponent.Sheets.getByName("List1") 'Nezaměnitelé - názvem
'oSheet = ThisComponent.Sheets.getByPosition(0) 'Alternativa podle pozice v sešitě (zaměnitelná)
oCellRange = oSheet.getCellRangeByName("A1:C5") 'Nezaměnitelé - názvem
'oCellRange = oSheet.getCellRangeByPosotion(0,0,2,4) 'Nezaměnitelé - číslem
REM Vyberte rozsah třdění.
REM Zvýraznění tříděných dat (většinou není potřeba).
ThisComponent.getCurrentController.select (oCellRange)
REM Sloupce jsou číslovány od 0, takže sloupec A je 0, sloupec B je 1, atd.
REM "Řadit" sloupec B (sloupec 1) sestupně.
oSortFields(0).Field = 2
oSortFields(0).SortAscending = FALSE 'Opakem je True (nikoliv descending)
REM Má -li sloupec B dvě buňky se stejnou hodnotou,
REM pak se rozhodne podle sloupce A - vzestupné třídění
oSortFields(1).Field = 0
oSortFields(1).SortAscending = True
REM Spustí sort descriptor.
oSortDesc(0).Name = "SortFields"
oSortDesc(0).Value = oSortFields()
REM Provede se třídění vlastního úseku.
oCellRange.Sort(oSortDesc())
MsgBox " Zjednodušená verze deskriptoru - hodí se zejména pro jeden typ" & _
" alfanumerických, nebo jen numerických dat, ale funguje i na smíšených." & _
" Pak ale doporučuji velkou obezřetnost",68,"HOTOVO"
End Sub
Následně spusťte složitější makro. Vyzkoušejte si přepsat parametry na Vzestupně a sestupně, na dva sloupce, 4 sloupce, a podobně.
Sub SortField_3Col_slozitejsi
Doc = ThisComponent
Sheet = Doc. Sheets (0)
oSheet = ThisComponent.sheets(0)
oSheet = ThisComponent.CurrentController.ActiveSheet
Dim sortField4(0) As New com.sun.star.util.SortField
Dim sortFields(2) As New com.sun.star.util.SortField
Dim sortProperties(1) As New com.sun.star.beans.PropertyValue
dataCells = oSheet.getCellRangeByPosition(0, 0, 2, 39) 'A1:C40
sortField4(0).Field = 2
sortField4(0).SortAscending = TRUE
sortField4(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
sortProperties(0).Name = "SortFields"
sortProperties(0).Value = sortField4()
' třídění 2. sloupec
dataCells.Sort(sortProperties())
' třídění podle třetího sloupce
sortFields(0).Field = 3
sortFields(0).SortAscending = TRUE
sortFields(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
sortFields(1).Field = 0
sortFields(1).SortAscending = TRUE
sortFields(1).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
sortFields(2).Field = 4
sortFields(2).SortAscending = TRUE
sortFields(2).FieldType = com.sun.star.util.SortFieldType.NUMERIC
' nastavení sort deskriptoru
sortProperties(0).Name = "SortFields"
sortProperties(0).Value = sortFields()
sortProperties(1).Name = "IsUserListEnabled"
sortProperties(1).Value = TRUE
' třídí 1, 0, 4
dataCells.Sort(sortProperties())
' access the data
data = dataCells.getDataArray()
MsgBox " Lepší verze deskriptoru zejména z pohledu typu dat tříděného úseku" & _
" Alfanumericky, nebo numericky",68,"HOTOVO"
End Sub
Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ