SortRange = Sheet.getCellRangeByName("F2:F"&GetLastRow(1)+1)
Pravděpodobně se správně, nebo včas nevytvoří textový výraz pro array. Jsou dvě cesty :
A) Deklarovat
x as long
x = GetLastRow(1)
SortRange = oSheet.getCellRangeByPosition(0,0,3,x) '(StartCol,StartRow,EndCol,EndRow)
B) Před pole SortRange = Sheet.getCellRangeByName("F2:F"&GetLastRow(1)+1) nastavt
sVar = "F2:F"&GetLastRow(1)+1
print sVar
Když to bude v pohodě:
SortRange = Sheet.getCellRangeByName(sVar)
Sub sortingData
Dim Doc As Object
Dim Sheet As Object
Dim oCell As Object
Dim SortRange As Object
Dim oSortDesc(1) As New com.sun.star.beans.PropertyValue
Dim oSortField(0) As New com.sun.star.table.TableSortField
Doc = ThisComponent
Sheet = Doc.Sheets(1)
SortRange = Sheet.getCellRangeByName("F2:F"&GetLastRow(1)+1)
oSortField(0).Field = 0
oSortField(0).IsAscending = false
oSortField(0).FieldType = com.sun.star.table.TableSortFieldType.AUTOMATIC
oSortDesc(0).Name = "SortFields"
oSortDesc(0).Value = oSortField
oSortDesc(1).Name = "ContainsHeader"
oSortDesc(1).Value = False
SortRange.sort(oSortDesc)
End Sub
Function GetLastRow(ByVal i as integer) 'Čte zadaný list podle pořadí v sešitě = proměnná "i"
Dim x as integer 'x je nyní 0 - tedy první sloupec "A"
oSheet = ThisComponent.getSheets().getByIndex(i)
oTargetCell = oSheet.getCellByPosition(x, 0)
If IsNull(oTargetCell) then
GetLastRow =oTargetCell.getRangeAddress.EndRow
Else
oCursor = oSheet.createCursorByRange(oTargetCell)
oCursor.gotoEnd
GetLastRow = oCursor.getRangeAddress.EndRow
End if
End Function
Sub Sort_4
Dim Doc As Object
Dim Sheet As Object
Dim oCell As Object
Dim SortRange As Object
Dim oSortDesc(1) As New com.sun.star.beans.PropertyValue
Dim oSortField(0) As New com.sun.star.table.TableSortField
Doc = ThisComponent
Sheet = Doc.Sheets(0)
SortRange = Sheet.getCellRangeByName("G10:G81")
oSortField(0).Field = 0
oSortField(0).IsAscending = True
oSortField(0).FieldType = com.sun.star.table.TableSortFieldType.AUTOMATIC
oSortDesc(0).Name = "SortFields"
oSortDesc(0).Value = oSortField
oSortDesc(1).Name = "ContainsHeader"
oSortDesc(1).Value = False
SortRange.sort(oSortDesc)
End Sub
Alespoň nástřel. Já mám mezi nejčastěji používanými makry 8 takových které nějak, nebo něco řadí. (Například řádky, víceúrovňově - podle více sloupců, nebo text či čísla). Takže toto makro by vám mělo pomoci.
Podle toho co píšete :
..........., kde je sloupec ze druhého listu vložen jako např. =$list2.F2. Samozřejmě je podmínka, aby i ostatní sloupce se seřadili. Jak na to makrem? Toto se děje po několika dalších věcech, které dělá makro, jen mi jen čistě o řazení
Toto makro by v této podobě umělo řadit jen jediný úsek o více sloupcích. Aby to fungovalo musel byste buď na každý seznam použít explicitně toto makro (s tím že uvedete "sheet" a "SortRange"). Ale technicky stačí předávat tomuto makru parametry - nejméně sešit - pokud jsou ty úseky na různých listech stejné. Číslo sešitu deklarujte jako "integer", nebo jako "string" pokud chcete posílat na jméno listu (aby nedošlo k záměně - protože stačí přehodit listy a makra půjdou úplně jinam podle aktuálního umístění v sešitě:-)
Když by Vám to nechtělo chodit udělejte kopii sešitu jen se simulovanými daty a popisem. Ale data by měla mít stejný formát jako originál. "SortDescriptor" býva prohnaná potvora.
]]>řeším teď jeden menší problém a věřím, že tady mi s ním tady bude schopen někdo poradit. Mám soubor ve kterém je několik listů. Ve druhém listu je sloupec, který potřebuji seřadit sestupně od nejvyššího čísla, ale zároveň aby se to řazení dostalo i do listu 3 a 4, kde je sloupec ze druhého listu vložen jako např. =$list2.F2. Samozřejmě je podmínka, aby i ostatní sloupce se seřadili. Jak na to makrem? Toto se děje po několika dalších věcech, které dělá makro, jen mi jen čistě o řazení. Díky za nakopnutí
]]>