nachdem ich im Forum bereits Filter automatisch aktualisieren? gefunden habe und auch sogleich übernehmen wollte stehe ich nun vor dem Problem der Umsetzung, da ich bisher keine Erfahrung mit Makros habe.
Meine C-Fähigkeiten und einiges rumprobieren haben mich schon mal etwas weiter gebracht, aber es besteht noch ein wenig Bugfixing und optimierungsbedarf
Folgende Ausgangssituation:
Das Makro prüft bei Änderung in den selektierten Tabellen(Ereignisse/Inhalt geändert) alle Tabellen, auf gefüllte Zellen in Spalte B. Wenn sie leer sind, also nur "", oder LEER als Inhalt haben werden/bleiben sie versteckt. Wenn sie Inhalt enthalten werden/bleiben sie sichtbar. Die gefilterten Zeilen werden in ein Diagramm übertragen. Durch das Verstecken der Leerzeilen entsteht ein sauberes Diagramm.
Hier mein Ansatz:
Code: Alles auswählen
Sub S_autofilter(Status as String)
odatabaserange = thiscomponent.databaseranges(0)
oFilterDescriptor = odatabaserange.FilterDescriptor
oFilterDescriptor.setFilterFields(array())
if Status = "True" then
odatabaserange.referredcells.Rows.Isvisible = True
else
odatabaserange.referredcells.Rows.Isvisible = False
endif
odatabaserange.refresh
end sub
Sub ForSchleifeFilter
for j = 10 to 17
for i = 3 to 10
ocell = thiscomponent.sheets(j).getCellByPosition(1, i) 'In Tabelle j prüfe Spalte B mit i bis 100
if ocell.Type is com.sun.star.table.CellContentType.EMPTY then 'Prüfe ob die Zelle leer ist
S_autofilter("True") 'Wenn sie leer ist, führe Funktion zum Verstecken der Reihe aus
else
S_autofilter("False") 'Wenn sie nicht leer ist, führe Funktion zum wieder sichtbar machen aus
endif
next i
next j
End Sub
Das Makro soll in einer Datei zum Einsatz kommen, die >20 Jahre in Nutzung sein soll. Dadurch werden viele Daten anfallen und i wird nicht maximal 10 betragen, sondern in die tausende bis zehntausende gehen, auch j wird mit großer Wahrscheinlichkeit einen größeren Bereich einnehmen. Wo kann ich hier am besten Optimierungen ansetzen um Rechenzeit einzusparen?
Gruß
Mat