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,983

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

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É

Offline

Zápatí