Jörg Schmidt schrieb: > Hallo, > >> From: Bernd Obermayr [mailto:[email protected]] >> ich möchte mit Basic feststellen ob in einem Sheet ein Autofilter >> aktiv ist. >> Ich habe im Netz gesucht, aber nur Code für die Einrichtung eines >> Autofilters gefunden oder z.B sowas hier: >> >> Thiscomponent.DatabaseRanges.getByName("_autoRange1").AutoFilter >> >> Das gibt mir die Antwort, ob überhaupt ein Bereich für einen Filter >> vorhanden ist. (True) >> >> Gibts nicht sowas wie' "oSheet.filtered" :) > Ich fürchte nein, aber ich bin nicht 100%ig sicher. > > Was könnte man tun? > Z.B. Prüfen ob alle Zeilen sichtbar sind und wenn das der Fall ist annehmen > das > kein Filter aktiv ist. > > Möglicherweise könnte man auch mit einem Listener den Filterevent bei der > Anwendung des Filter detektieren und den Filterzustand dann in einer Variable > 'aufbewahren'. Hallo Jörg, danke für Deine Mühe. Mir hat das keine Ruhe gelassen. Bei forum.openoffice.org hab ich dann einen Hinweis gefunden. Zusammen mit Xray konnte ich dann die Stelle ermitteln:
filters=ubound(Thiscomponent.DatabaseRanges.getByName(Rg).Filterdescriptor.filterfields) Gibt die Anzahl der Filter (beginnend bei Null) oder -1 wenn kein Filter definiert ist. Das ist ja perfekt, das ist wie "oSheet.filtered" :) Rg ist eine NamedRange die die Range des Filterbereichs enthält. Zu sehen unter >Daten>Bereich festlegen. in filterfields() findet man noch mehr Info über den Filter: ---------8<--------- Connection com.sun.star.sheet.FilterConnection 0 enum: com.sun.star.sheet.FilterConnection.AND Field long 5 IsNumeric boolean False NumericValue double 0 Operator com.sun.star.sheet.FilterOperator 2 enum: com.sun.star.sheet.FilterOperator.EQUAL StringValue string "Mobilkom" ---------8<--------- Schon seit langem verwende ich in Calc (und auch in Excel) folgendes Man braucht eine Zelle mit einer Spaltensumme z.B summe(a10:A100) und eine Zelle mit Teilergebnis z.B: teilergebnis(9;A10:a100) nun kann man eine Zelle mit Bedingter Formatierung "$A$1 != $A$2" z.B Rot einfärben, wenn die beiden Zellen unterschiedliche Ergebnisse anzeigen. Das hat sich im Job sehr bewährt, es passiert immer wieder (mir auch) dass ein aktiver Filter übersehen wird (Die Marker sind so winzig :) ) Fürs Archiv hier noch die Function, die ich jetzt benutze: Ich habe einen Dialog zur Datenbearbeitung in einem Tabellenblatt, der funktioniert nur richtig, wenn kein Filter aktiv ist. Das prüfe ich hiermit: ---------8<--------- '' Wenn ein Autofilter in der NamedRange mit dem Namen 'Rg:string' aktiv ist '' gibt die Function den Suchbegriff und die Spalte zurück '' ansonsten -1 '' Parameter: '' Rg = STRING:DatabaseRange '' dummy = VARIANT '' Ist nötig, damit die Function auch in einem Sheet benutzt werden kann. " hier wird eine Zelle angegeben, die automatisch berechnet wird (z.B: eine Summe) '' Tip gefunden in <https://forum.openoffice.org/en/forum/viewtopic.php?t=1049> '' public Function isFilterActive(Rg$,optional dummy) as string dim isfiltered%, filters% ,i% dim res$ isfiltered=-1 on error resume next '' Wenns hier einen Laufzeitfehler gibt, heisst das: Es ist kein Filter vorhanden oder rg existiert nicht '' In dem Fall bleibt isfiltered auf -1 filters=ubound(Thiscomponent.DatabaseRanges.getByName(Rg).Filterdescriptor.filterfields) 'Xray Thiscomponent.DatabaseRanges.getByName(rg).Filterdescriptor if filters >= 0 then for i% = 0 to filters isfiltered=Thiscomponent.DatabaseRanges.getByName(Rg).Filterdescriptor.filterfields(i).Field res = res & Thiscomponent.DatabaseRanges.getByName(Rg).Filterdescriptor.filterfields(i).StringValue & " (" & chr(isfiltered + 65) & ")" & chr(13) next i end if on error goto 0 if isfiltered >= 0 then isFilterActive=res else isFilterActive=-1 end if end function ---------8<--------- -- Gruss Bernd --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
