Armin Barth wrote:
On Sun, Sep 03, 2006 at 11:39:29PM +0200, Andreas Saeger wrote:
Danke Andreas für die Schnelle Antwort.
Ein paar Fragen habe ich jedoch noch.

[...] Wo muss ich diese SELECT-Anweiseung eintragen?


Im Kontextmenü der Datenquelle:"Bearbeiten ..."
odb-Dokument wird geöffnet.
Abfrage erstellen.

Dann probier mal folgendes:
Daten>Bereich festlegen...
Name: Lieferanten
Bereich: Eine einzelne Zelle als Startpunkt
Zusätze>"Zellen einfügen/löschen" (passt die Größe des Bereiches an die Abfragegröße an, inklusive angrenzender Formeln)
Hinzufügen
OK
Ziehe die Abfrage auf den einzelligen Datenbankbereich.
Meldung: "Inhalte von 'lieferanten' überschreiben?" Ja!
Aktualisierung des Bereichs:
Den Bereich oder eine einzelne Zelle darin markieren und Menu:Daten>"Bereich aktualisieren".
Validierung für Deine Zelle C2:
Typ: Zellbereich
Quelle: Lieferanten

O.k. habe ich verstanden.
Ich erhalte aber nur eine Zelle aus dem ausgewählten Bereich der
Datenbank (und zwar die erste).
Selektiere nochmal den Datenbankbereich und prüfe, ob die Option "Zellen einfügen/löschen" gesetzt ist. Dann evtl. nochmal die Tabelle/Abfrage drüberziehen. Teste es einfach mal mit irgendeiner Tabelle/Abfrage.

Ooops: Wo ich das schreibe fällt mir ein, dass die Kopfzeile in importierten Bereichen immer mit eingeschlossen ist. Vielleicht ist das tolerierbar?

Das wäre nicht so trageisch, wenn alle anderen Werte der
DB-Tabellen-Spalte auch sichtbar wären.

Schön. Dann wäre ja eigentlich das Thema gegessen ;)

Hiermit (=VERSCHIEBUNG)  bin ich noch am testen. Ich melde mich dazu noch
einmal.

Sorry, mein Fehler.Es sollte heißen
=VERSCHIEBUNG(Lieferanten;1;0;ZEILEN(Lieferanten)-1;1)
Die Formel gibt Lieferanten ohne Kopfzeile als Matrix (mehr als ein Wert) zurück. Extras>Zellinhalte>"Automatische Berechnung" eingeschalten und die Formel mit Strg+Shift+Enter eingegeben.

Ein Makro wäre nicht schlecht.

Schön, vergiss das mit der VERSCHIEBUNG und kopiere dieses Makro in das Dokument, wobei die Helferlein "getRangeFromAddress" und "getRangeName" evtl. in die globale Standard-Bibliothek gehören, weil sie zu vielen anderen denkbaren Calc-Makros eine sinnvolle Ergänzung sein können.
"CopyDBRg2valList" ist wohl eher spezifisch für das Dokument.
Es aktualisiert den Datenbankbereich, kopiert den neuen Datenbankbereich (ohne die Kopfzeile) zu einem benannten Bereich(löscht vorher dessen Inhalte) und ändert den Bezug des benannten Bereichs.
Eigentlich müssen nur die beiden Konstanten am Anfang angepasst werden.
Vorsicht mit den Zeilenumbrüchen, wenn dies aus einem Mailprogramm kopiert wird.
REM  *****  BASIC  *****
Option Explicit
Sub CopyDBRg2valList
REM Diese zwei Konstanten anpassen:
'Name des importierten Datenbankbereichs
Const dbRange = "Lieferanten"
'Validierungsliste ohne Kopfzeile (benannter Bereich Strg+F3)
Const Validation = "valList"
Dim oDB,oNamed,lFlags&,oSrc,oTgt,oAdr,sNewAdr$,oNewRg
REM Neuen Datenbankbereich holen ("Zellen einfügen/löschen" sollte gesetzt sein)
        oDB = thisComponent.DatabaseRanges.getByName(dbRange)
        oDB.refresh
        oSrc = oDB.getDataArea
        REM ohne Kopfzeile:
        oSrc.StartRow = oSrc.StartRow +1
        REM Zielbereich vorbereiten
        oNamed = thisComponent.NamedRanges.getByName(Validation)
        With com.sun.star.sheet.CellFlags
                lFlags = .VALUE + .STRING + .FORMULA
        End With
        With oNamed.getReferredCells
                .clearContents(lFLags)
                oAdr = .getRangeAddress
                oTgt = .getCellByPosition(0,0).getCellAddress
        End With
REM kopiere Datenbankbereich ohne Kopfzeile zur ersten Zelle der Validierungsliste
        thisComponent.getSheets.getByIndex(oSrc.Sheet).copyRange(oTgt,oSrc)
        REM Ändere die Adress-Struktur der Validierungsliste:
        oAdr.EndColumn = oAdr.StartColumn + oSrc.EndColumn - oSrc.StartColumn
        oAdr.EndRow = oAdr.StartRow + oSrc.EndRow - oSrc.StartRow
REM ... und hier beginnt der API-Stress, wenn man nicht geeignete Funktionen in Petto hat:
        REM Hole den Bereich zur Adress-Struktur:
        oNewRg = getRangeFromAddress(thisComponent,oAdr)
        REM Hole die String-Adresse des Bereichs:
        sNewAdr = getRangeName(oNewRg,63)
        REM setzte die String-Adresse als Inhalt des benannten Bereichs:
        oNamed.setContent(sNewAdr)
End Sub
REM ------------Kopiert aus meiner Standard-Bibliothek----------------
'pass a spreadsheet-document or sheet. the latter ignores the sheet-part of the address
'return empty if oAddr out of bounds
Function getRangeFromAddress(oObj,oAddr as com.sun.star.table.CellRangeAddress)
Dim oSheet
        If oObj.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
                oSheet = oObj.getSheets.getByIndex(oAddr.Sheet)
        else
                oSheet = oObj
        endif
on error resume next
getRangeFromAddress = oSheet.getCellRangeByPosition(oAddr.StartColumn,oAddr.StartRow,oAddr.EndColumn,oAddr.EndRow)
End Function
'returns: any variant of string-address (eg. A1:B5,sheet.A1:B5,$sheet.A1:B5,sheet.$A1:$B5,...,$sheet.$A$1:$B$5) 'takes a spreasheet-doc, a range and optional flags(default returns relative A1:B5 without sheet name)
Function getRangeName(oRg,Optional iFlag%)as string
on error goto exitErr
const iSh% = 1
const iShAbs% = 2
const iC1% = 4
const iR1% = 8
const iC2% = 16
const iR2% = 32
        Dim oAddr, oSh
dim s$,sSh$,sC1$,sC2$,sR1$,sR2$,bR1 as boolean,bC2 as boolean,bR2 as boolean
        oAddr = oRg.getRangeAddress
        oSh = oRg.getSpreadSheet
        sSh = oSh.getName
        sC1 = oSh.Columns.getByIndex(oAddr.StartColumn).getName
        sC2 = oSh.Columns.getByIndex(oAddr.EndColumn).getName
        sR1 = cStr(oAddr.StartRow +1)
        sR2 = cStr(oAddr.EndRow +1)
        if not isMissing(iFlag) then
                if iFlag AND iSh then
                        if (iFlag AND iShAbs)=iShAbs then s = "$"
                        s = s & sSh &"."
                end if
                if iFlag AND iC1 then s = s &"$"
                bR1 = iFlag AND iR1
                bC2 = iFlag AND iC2
                bR2 = iFlag AND iR2
        end if
        s = s & sC1
        If bR1 then s = s & "$"
        s = s & sR1
        If NOT(oRg.supportsService("com.sun.star.sheet.SheetCell")) then
                s = s &":"
                if bC2 then s = s & "$"
                s = s & sC2
                if bR2 then s = s &"$"
                s = s & sR2
        endif
        getRangeName = s
exitErr:
end function

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Antwort per Email an