Im Forum habe ich ein Autofilter-Makro von Winfried (komma4) gefunden, welches mir schon gut gefallen könnte.[Gelöst]: Autofilter als Makro
Jedoch schaffe ich es nicht das Makro so umzuschreiben, das ich kein Monstermakro erstelle welches für 3 anstatt nur 1 Bereich zuständig ist. Mit Monstermakro meine ich, das ich diesen Teil des Makros
Code: Alles auswählen
[...]
oBereichAlleDaten = oDatenSheet.getCellRangeByName( "A1:B50" )
oFilterBeschreib = oBereichAlleDaten.createFilterDescriptor ( TRUE )
oFilterFeld = createUnoStruct( "com.sun.star.sheet.TableFilterField" )
With oFilterFeld
.Field = 0 ' Spalte A
.Operator = com.sun.star.sheet.FilterOperator.EQUAL
.StringValue = "*"
End With
oFilterBeschreib.setFilterFields( Array( oFilterFeld ) )
oFilterBeschreib.CopyOutputData = TRUE
oZielZelle = oDok.Sheets().getByName( "Tabelle1" ).getCellByPosition( 6,0 ) 'Spalte/Zeile
oFilterBeschreib.OutputPosition = oZielZelle.CellAddress
oBereichAlleDaten.filter( oFilterBeschreib )
[...]
Okay, das würde wohl funktionieren, aber das ist ja dann wohl nun doch absoluter schw...
Und deshalb hatte ich mir gedacht, das ich das in eine FOR-NEXT-Schleife packe. Aber genau dabei haperts, und ich hab kein Durchblick mehr, leider

Code: Alles auswählen
[...]
For i = 0 to 3 step 3
oBereichAlleDaten = oDatenSheet.getCellRangeByPosition( i,0,i+1,49 )
oFilterBeschreib = oBereichAlleDaten.createFilterDescriptor ( TRUE )
oFilterFeld = createUnoStruct( "com.sun.star.sheet.TableFilterField" )
With oFilterFeld
.Field = i
.Operator = com.sun.star.sheet.FilterOperator.EQUAL
.StringValue = "*"
End With
oFilterBeschreib.setFilterFields( Array( oFilterFeld ) )
oFilterBeschreib.CopyOutputData = TRUE
oZielZelle = oDok.Sheets().getByName( "Tabelle1" ).getCellByPosition( i+6,0 )
oFilterBeschreib.OutputPosition = oZielZelle.CellAddress
oBereichAlleDaten.filter( oFilterBeschreib )
next i
[...]
Im 1. Durchlauf der FOR-NEXT wird das Suchkriterium * mit dem rechts daneben stehendem Text in den richtigen Spalten ausgegeben.
Im 2. Durchlauf der FOR-NEXT werden nur die Einträge aus dem 2. Datenbereich übernommen die auf gleicher Höhe wie das Ergebnis vom 1. Durchlauf stehen, was natürlich total falsch ist. Also habe ich wohl da noch einen logischen Fehler drin, den ich aber nicht seh und versteh.
Ich hatte zwischenzeitlich auch versucht vor aufruf von "next i" einige Variablenamen zu Redimmen (Redim), was natürlich auch nichts brachte.
Meine Fragen an euch lauten nun:
Wo liegt der Fehler in meiner Überlegung?
Wie muss ich das Makro umbauen, das es 3 Datenbereiche Filtert und ordnungsgemäß an den gewünschten Stellen gefiltert ausgibt?
Oder geht das mit diesem Makro gar nicht und ich muss ein anderes nehmen?
Könnt ihr mir behilflich sein?
Habe eine kleine Beispieldatei angehängt.
Freue mich auf eure Antworten, und bedanke mich schon mal für eure Bemühungen

Gruß
balu