Calc Sortierung VBA

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

Calc Sortierung VBA

Beitrag von moritz »

Hallo,
aus einer Windows- Anwendung möchte ich mit VBA Daten nach OO2.3-Calc übertragen und anschließend die Tabelle sortieren. Klappt einschließlich Formatierung (Rahmen, Zellfarbe) auch problemlos. Nur bei der Sortierung habe ich Probleme. Hier ist das Original eines Starbasic- Makros. Funktioniert ebenfalls.
Leider klappt die Umsetzung in VBA nicht. Es kommt keine Fehlermeldung, die Daten werden aber nicht sortiert. Hat jemand einen Tip, woran das liegen könnte?
Moritz

Sub SortRange 'Das Starbasic- Original
Dim oSheet ' Calc sheet containing data to sort.
Dim oCellRange ' Data range to sort.
Dim oSortFields(1) As New com.sun.star.util.SortField
Dim oSortDesc(0) As New com.sun.star.beans.PropertyValue
oSheet = ThisComponent.Sheets.getByName("Tabelle1")
oCellRange = oSheet.getCellRangeByName("A1:C5")
'ThisComponent.getCurrentController.select(oCellRange)
oSortFields(0).Field = 1
oSortFields(0).SortAscending = FALSE
oSortFields(1).Field = 0
oSortFields(1).SortAscending = True
oSortDesc(0).Name = "SortFields"
oSortDesc(0).Value = oSortFields()
oCellRange.Sort(oSortDesc())
End Sub

nun die VBA- Variante
sub Daten_in_Calc_mit_VBA_sortieren()

Dim objServiceManager As Object
Dim objDesktop As Object
Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
Set objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
Dim objDocController As Object
Dim objDocFrame As Object
Set objDocController = objWorkBook.getCurrentController()
Set objDocFrame = objDocController.getFrame()
Dim oCellRange As Object
Dim oSortFields(0) As Object
Set oSortFields(0) = createUNOStruct("com.sun.star.util.SortField")
Dim oSortDesc(0) As Object
Set oSortDesc(0) = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
oSortFields(0).Field = 1
oSortFields(0).SortAscending = True
oSortDesc(0).name = "SortFields"
oSortDesc(0).value = oSortFields()
' Set oCellRange = objWorksheet.getCellRangeByPosition(0, 2, 7, 50)
Set oCellRange = oWorksheet.getCellRangeByName("A1:C5")
oCellRange.Sort (oSortDesc())
end Sub

Public Function CreateUnoService(strServiceName) As Object
Dim oServiceManager As Object
Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
Set CreateUnoService = oServiceManager.createInstance(strServiceName)
End Function

Private Function createUNOStruct(strTypeName)
Dim objServiceManager As Object
Dim objCoreReflection As Object
Dim classSize As Object
Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
Set objCoreReflection = objServiceManager.createInstance("com.sun.star.reflection.CoreReflection")
Set classSize = objCoreReflection.forName(strTypeName)
Dim aStruct
classSize.CreateObject aStruct
Set createUNOStruct = aStruct
End Function