Re: Autofilter als Makro
Verfasst: Mo, 21.04.2008 19:23
Uwe,
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).
Wenn Du in Calc nicht weisst wie gross Dein Datenbereich ist, ermittelt dies bspw. eine solche Funktion
aus: calc_colorRows
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?
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?