das Aufzeichnen von Makros in OOo ist meist unvollständig.
Fü�eine Makrolös�g benöti�t zunächs�eine Referenz auf den Bereich(1), Dann wird ein Filter erstellt(2), zuletzt der Filter auf die Daten angewendet(3).
Wenn Du "filtern und kopieren" möchte�, dann ist der Standardfilter in BASIC um zwei Eigenschaften(4) erweiterbar.
Wir befinden uns in einer Calc-Datei mit den Blättern�quot;Tabelle1" (mit den Daten zum Filtern) und "Tabelle3" (Blatt zur Ausgabe, warum nicht Tabelle3).
Code: Alles auswählen
'(1)
' Dokument
oDok = ThisComponent
' Tabellenblatt mit Daten
oDatenSheet = _
oDok.getSheets().getByName( "Tabelle1" )
' Bereich
oBereichAlleDaten = _
oDatenSheet.getCellRangeByName( "A1:D12" )
'(2)
' FILTER erstellen
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 = "Treffer"
End With
' Feld auf Filter anwenden
oFilterBeschreib.setFilterFields( Array( oFilterFeld ) )
' (4)
' Ausgabebereich des Filters festlegen
' ========
oFilterBeschreib.CopyOutputData = TRUE
' ----><> Startzelle des Ausgabebereichs
oZielZelle = _
oDok.Sheets().getByName( "Tabelle3" )._
getCellByPosition( 2 , 0 ) ' Spalte/Zeile
' Zieladresse zuweisen
oFilterBeschreib.OutputPosition = _
oZielZelle.CellAddress
' Filter auf Datenbereich anwenden
oBereichAlleDaten.filter( oFilterBeschreib )
Wenn Du in Calc nicht weisst wie gross Dein Datenbereich ist, ermittelt dies bspw. eine solche Funktion
aus: calc_colorRows
Code: Alles auswählen
' ========================================================================
' rein: Sheet als Object
' raus: Nummer der letzten Zeile/Spalte (bei Null beginnend)
Function getLastUsedColumn(oSheet as Object) as Integer
Dim oCell As Object
Dim oCursor As Object
Dim aAddress As Variant
oCell = oSheet.GetCellbyPosition( 0, 0 )
oCursor = oSheet.createCursorByRange(oCell)
oCursor.GotoEndOfUsedArea(True)
aAddress = oCursor.RangeAddress
GetLastUsedColumn = aAddress.EndColumn
End Function
Function getLastUsedRow(oSheet as Object) as Long
Dim oCell As Object
Dim oCursor As Object
Dim aAddress As Variant
oCell = oSheet.GetCellbyPosition( 0, 0 )
oCursor = oSheet.createCursorByRange(oCell)
oCursor.GotoEndOfUsedArea(True)
aAddress = oCursor.RangeAddress
GetLastUsedRow = aAddress.EndRow
End Function
Vielleicht findest Du das Codebeispiel zum CSV-Import auch hilfreich:
insertCSV2Calc
[quote="insertCSV2Calc"]Einfügen de�Daten einer CSV-Datei in eine Tabelle einer Calc-Datei.
Dokumentation im ODT-Format. Modul leistet als Beispiel den Import gleichartig strukturierter, durch ein Trennzeichen getrennter Daten in eine neue Tabelle einer Calc-Datei. Durch ein mitgeliefertes Hilfsmakro können di�nötigen Fi�eroptionen einfach ermittelt werden.
Code Anpassungen nötig![/quo�]
Hilft Dir das weiter?