Ergebnisse aus dem komplexen Filter in unterschiedliche Ziele kopieren

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


    Other languages:

    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.

    Note pin.svg

    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.