Jump to content

Ergebnisse aus dem komplexen Filter in unterschiedliche Ziele kopieren

From The Document Foundation Wiki
This page is a translated version of the page Macros/Calc/ba030 and the translation is 100% complete.


Zusammenfassung

Diese Seite zeigt ein LibreOffice Basic Makro Codeschnipsel, das die Ergebnisse aus einem komplexen Filter in verschiedene Ziele filtert. Es ist ein Beispiel aus Kapitel 13 ("Calc als Datenbank") aus dem Handbuch zu Calc 7.0.

Beschreibung

Die Ergebnisse eines komplexen Filters können mit der Einstellung OutputPosition an eine andere Position geladen werden. Die Ergebnisse auf diesem Weg zu kopieren vermeidet es für Calc, Zeilen auszublenden, die den Suchkriterien nicht entsprechen. Das würde normalerweise beim Filtern an die Stelle stattfinden.

Das folgende Makro Code Schnipsel zeigt, wie die Filterergebnisse an eine andere Stelle kopiert werden. Die Filterbeschreibung muss erst angepasst werden, bevor diese Filtereinstellungen eingesetzt werden.

Um die Funktionsweise dieses Schnipsels zu demonstrieren, wird der Code für das Makro AdvancedRangeFilter aus der Seite einen komplexen Filter erstellen genommen und der folgende Code eingesetzt. Das verlinkte Tabellenblatt enthält die modifizierte Version des AdvancedRangeFilter Makros und es verwendet ein Notenblatt in den Zellen $Tabelle1.A1:H11 als Datenbereich und Zellen $Tabelle2.A1:H3 als Kriterienbereich. Die gefilterten Ergebnisse stehen in $Tabelle1.B13:I19.

Anmerkung:
Das Merkmal OutputPosition gibt eine Kopie einer Struktur zurück. Als Ergebnis ist es nicht möglich, individuelle Werte, wie eine Zeile oder eine Spalte, direkt in dieses Merkmal einzusetzen. Das Ändern der oFilterDesc.OutputPosition.Row auf 2 z. Bsp. wird nicht funktionieren, da die Kopie geändert wird und nicht das Original.

Code

REM Die Ausgangsdaten werden mehr an die richtige Stelle kopiert als gefiltert.
  oFiltDesc.CopyOutputData = True

  REM eine CellAddress erstellen und in Tabelle1 einsetzen
  REM Spalte B, Zeile 13 (nicht vergessen, mit 0 anfangen zu zählen)
  Dim outputCell As New com.sun.star.table.CellAddress
  outputCell.Sheet = 0
  outputCell.Column = 1
  outputCell.Row = 12
  oFiltDesc.OutputPosition = outputCell

Dieses Calc Tabellenblatt enthält den obigen LibreOffice Basic Code.