On Mon, Sep 04, 2006 at 01:44:49PM +0200, Andreas Saeger wrote:
> 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.

o.k. -- kein Problem

> 
> >
> >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)

Hierbei kommt immer der Fehler 504.

> 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"

muss hier nur der Tabellenname hin oder der kompltte Name mit Datenbank
z.b. "meinedb:lieferanten"  ?

> 'Validierungsliste ohne Kopfzeile (benannter Bereich Strg+F3)
> Const Validation = "valList"

Erklär mal bitte "Validierungsliste"
Ist das das Ergebis meiner SELECT... Abfrage?

 
> 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)

Hier bleibt das Makro hängen mit der Fehlerausschrift
BASIC-Laufzeitfehler. Es ist eine Exception aufgetreten. 
Typ: com.sun.star.container.NoSuchElementExeption
Message:.

>       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
> 
Gruß 

Armin 
-- 
[EMAIL PROTECTED]

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

Antwort per Email an