Excel VBA zu Starbasic - Sortieren

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

Moderator: Moderatoren

mbahlke
Beiträge: 2
Registriert: Fr, 22.01.2010 08:46

Excel VBA zu Starbasic - Sortieren

Beitrag von mbahlke »

Bin kompletter Newbie in Starbasic, muss aber eine Excel-Datei zu OO konvertieren.
In einer gesperrten Excel-Datei wird per Button eine Sortierfunktion für einen genau definierten Zellbereich aufgerufen:

Private Sub SortierentrotzSperre()
With ActiveSheet
.Unprotect "passwort"
.Range("A10:O409").Select
Application.Dialogs(xlDialogSort).Show
.Protect "passwort"
End With
End Sub

Es wird also mittels Application.Dialogs(xlDialogSort).Show die in Excel eingebaute Sortierfunktion(-Dialog) aufgerufen, damit der User selbst bestimmen kann wonach er sortieren will (A9 enthält die Spaltenüberschriften - das erkennt Excel auch).
Und hier hakt es! Wie realisiere ich dass in Starbasic? Stundenlanges "googlen" hat leider nicht geholfen.

In Starbasic bin ich bis hierher gekommen:
Private Sub SortierentrotzSperre()
Dim oSheet as Object
oSheet = ThisComponent.CurrentController.ActiveSheet
With oSheet
.Unprotect "passwort"
.getCellRangeByName("A10:O409")
REM HIER MÜSSTE NUN DER AUFRUF DER SORTIERFUNKTION (DIALOG) HIN
.Protect "passwort"
End With
End Sub

Für schnelle Hilfe wäre ich echt dankbar.
mbahlke
Beiträge: 2
Registriert: Fr, 22.01.2010 08:46

Re: Excel VBA zu Starbasic - Sortieren

Beitrag von mbahlke »

Ok,
Als Notlösung habe ich jetzt per Makro-Aufzeichnug die häufigsten Sortierungen aufgezeichnet, angepasst und diese jeweils einem Button zugeordnet.
Das funktioniert auch, ABER:

Die Sortierung wird zwar gemacht, auf dem Bildschirm ist aber immer noch die vorherige Sortierung zu sehen. Erst wenn man den sortierten Bereich aus dem sichbaren Bildschirmbereich raus- und wieder reinscrollt ist die Anzeige aktualisiert!? Gibt es hierfür eine Lösung?
Das Gleiche passiert übrigens bei Eingabe in eine Zelle. Die Zelle scheint leer zu sein, wenn man aber darauf klickt steht oben in der Zeile den eingebenen Text.
Auch hier: erst beim raus -und reinscrollen wird das Ganze in der Zelle sichtbar...

Hier das Sortierscript:
sub SortbySheetProtection()
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
Dim oSheet as Object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oSheet = ThisComponent.CurrentController.ActiveSheet
With oSheet
.Unprotect "passwort"
rem .getCellRangeByName("A10:O409")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$9:$O$409"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(8) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = true
args2(1).Name = "HasHeader"
args2(1).Value = true
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "IncludeAttribs"
args2(3).Value = true
args2(4).Name = "UserDefIndex"
args2(4).Value = 0
args2(5).Name = "Col1"
args2(5).Value = 4
args2(6).Name = "Ascending1"
args2(6).Value = true
args2(7).Name = "Col2"
args2(7).Value = 2
args2(8).Name = "Ascending2"
args2(8).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())
.Protect "passwotr"
End With
args1(0).Name = "ToPoint"
args1(0).Value = "$B$10"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
end sub
Antworten