Hi,
lessger hat geschrieben:
Da werde ich mich wohl mit der Filterlogik befassen müssen.
Kannst Du machen, wird sicherlich kompliziert. Der Befehl
in deinem Makro, aktualisiert aus einer Datenbank importierte Bereiche, setzt aber den Filter nicht neu.
Ich habe einen Workaraound, benutze den aufgezeichneten Befehl
, der macht alles zusammen, Bereich aktualisieren und Filter neu setzen. Damit der .uno Befehl greift, muss das Blatt, auf dem sich der Bereich "AlleSpesen" befindet, aktiv sein, darum springen wir auf das Blatt und danach zurück auf das Blatt, von dem aus du das Makro startest, die Aktion sieht man bei mir nicht.
Hier der angepasste Code:
Code: Alles auswählen
sub S_refresh_DB_Ranges_recorded
oController = ThisComponent.CurrentController
oCurrentsheet = oController.activesheet
oDBRange = ThisComponent.DataBaseRanges.getByName("AlleSpesen")
oDBRangeSheet = Thiscomponent.sheets(oDBRange.Dataarea.Sheet)
oController.activesheet = oDBRangeSheet
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DataAreaRefresh", "", 0, Array())
oController.activesheet = oCurrentsheet
end sub
Ein Beispiel anbei
Refresh_Spezialfilter.ods
HTH R
EDIT: Es ist für den Spezialfilter nicht notwendig einen Datenbereich (Databaserange) zu verwenden, der üblicherweise, wie o.a. zum Import von Datenbankbereichen verwendet wird.
Es ist ausreichend, innerhalb der Calc-Datei einem Bereich einen Namen (Einfügen/Namen/Festlegen ...) zu geben und den Spezialfilter damit zu definieren. Dann muss das Makro etwas verändert werden:
Code: Alles auswählen
sub S_refresh_Named_Ranges_recorded
oController = ThisComponent.CurrentController
oCurrentsheet = oController.activesheet
oNamedRange = ThisComponent.NamedRanges.getByName("AlleSpesen")
oNamedRangeSheet = Thiscomponent.sheets(oNamedRange.ReferredCells.RangeAddress.Sheet)
oController.activesheet = oNamedRangeSheet
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DataAreaRefresh", "", 0, Array())
oController.activesheet = oCurrentsheet
end sub
Siehe Datei
Refresh_Spezialfilter_named_Ranges.ods