Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 16. 3. 2016 13:35:29

martan1484
Člen
Registrace: 30. 12. 2010
Příspěvků: 14

makro - Sort - metoda nenalezena VYŘEŠENO

Prosím o pomoc. Mám makro, které ma seřadit data ve dvou sloupcích podle druhého z nich. Makro proběhne až do řádku, na kterém je "sort". Zde nahlásí chybu: "Vlastnost nebo metoda nenalezena: sort".
Nejsem schopen odhalit chybu.

Kód:

Sub Seradit(PocetCilu as Integer)

	dim TridPodle(0) as New com.sun.star.util.SortField
	dim serad(1) as New com.sun.star.beans.PropertyValue
	oblast = thisComponent.Sheets(6).getCellByPosition(0,0,1,PocetCilu-1).RangeAddress	
	
	TridPodle(0).Field = 1
	TridPodle(0).SortAscending = true
	TridPodle(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
	
	serad(0).Name = "SortFields"
	serad(0).Value = TridPodle()
	serad(1).Name = "ContainsHeader"
	serad(1).Value = False
	
	oblast.sort(serad())

End Sub	

LO je verze 4.4.7.2, běží na Win7.

Editoval martan1484 (17. 3. 2016 09:24:12)

Offline

#2 16. 3. 2016 15:11:10

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,697

Re: makro - Sort - metoda nenalezena VYŘEŠENO

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

Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

Zápatí