[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/privacyprotection/cron/task/anonymize_ip.php on line 83: A non-numeric value encountered
Inoffizielles deutsches Xbase-Forum • Excel worksheets:add() ans Ende ???
Seite 1 von 1

Excel worksheets:add() ans Ende ???

Verfasst: Do, 10. Apr 2008 16:43
von brandelh
Hallo,

laut Excel Hilfe kann man worksheets.add(bevore,after) Parameter übergeben, an welche Stelle das neue WorkSheet soll. Bei Xbase++ kommt es immer vor das aktuelle ...

Auch MOVE() funktioniert nicht, sonst könnte ich es ja einfach verschieben. Eventuell liegt es an den 'VARIANT' Variabeln ?

Hat jemand eine Lösung ?

Verfasst: Do, 10. Apr 2008 16:50
von Martin Altmann
Hallo Hubert,
yup - war erst vor kurzem Thema in der Newsgroup von Alaska:
Ron Pinkas hat geschrieben:Try:

Worksheets:Add:Move( , Worksheets( Worksheets:Count ) )

The Move method is documented as follows:

Move( [Before], [After] )
Ich wäre nie auf die Idee gekommen, das so umzusetzen - aber probiere mal, ob es klappt.

Viele Grüße,
Martin

Verfasst: Do, 10. Apr 2008 19:04
von brandelh
Hi,

das mit der Parameterübergabe (VB sehr flexibel VarName:=Option) ist ein echtes Problem. Ich dachte immer es müsste eine PRG geben, die die Methoden enthält (ähnlich wie damals von JazzAge ...) da könnte man dan nachsehen, aber ich kann nichts finden.

Ich werde es versuchen die METHODE ADD:Move(...) so aufzurufen, danke.

Verfasst: Do, 10. Apr 2008 21:02
von Alfred
Hallo Hubert,

das von dir beschriebenen Verhalten hat nichts mit Xbase++ zu tun.
Das ist bei der Office Automation bei Excel der Standard.
If no parameters are passed, the new sheet is placed just before the
ActiveSheet.
Was möchtest du denn erreichen?

Gruß
Alfred

Verfasst: Fr, 11. Apr 2008 13:40
von brandelh
Hallo Alfred,

ich will dass das neue Worksheet ans ENDE kommt. Dazu will ich dem :add(,nEnde) den richtigen Parameter übergeben, aber egal was ich versuche meldet Excel und Xbase++ immer einen Fehler.

Hallo Martin,

dein zitiertes Beispiel wurde erst mit 'missing Function Worksheet' quittiert, was ja auch kein Wunder ist ... mit direktem Aufruf kommt immer der gleiche Fehler:

[quote]
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "D:\Alaska\ALASKA.190\XPPW32\SOURCE\samples\activex\msexcel\excel2.exe" Datum: 11.04.2008 13:33:12

Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows 2000 05.00 Build 02195 Service Pack 4
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: move
-> VALTYPE: U VALUE: NIL
-> VALTYPE: N VALUE: 4
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Die Move-Methode des Worksheet-Objektes konnte nicht ausgef

Verfasst: Fr, 11. Apr 2008 19:34
von brandelh
Hi,

im Alaska Forum hatte jemand die richtige Antwort für mich:

Code: Alles auswählen

oBook:worksheets:add( , oBook:worksheets(oBook:Worksheets:Count()))
oBook:Worksheets:Count() -> 3

aber

Code: Alles auswählen

oBook:worksheets:add( ,  3 )
geht nicht, somit ist der gewünschte Datentyp Variant nicht die NUMMER des Worksheet, sondern wohl das Worksheet selbst ???
Egal auf jeden Fall geht es so und ich bin heilfroh das nun geklärt zu haben :D Auf eine so umständliche Art wäre ich wohl nie selbst gekommen.

@Martin

nochmals Danke für den Hinweis, ab und zu sollte ich wohl doch wieder ins Alaska Forum sehen ;-)

Verfasst: Fr, 11. Apr 2008 19:38
von brandelh
Hi,

kleiner Nachtrag ...

Code: Alles auswählen

oBook:worksheets:add(,oBook:worksheets(3))
das hätte bei 3 Worksheets auch funktioniert, also stimmt wohl die Vermutung dass man das betreffende Worksheet selbst übergeben muss ... und so abwegig (umständlich) wie ich dachte ist es ja eigentlich gar nicht.
Wir übergeben ja auch gerne Objekte.

Verfasst: Fr, 11. Apr 2008 19:49
von brandelh
und noch was ...

wenn man das gerade aktive Sheet gespeichert hat, z.B. in oSheet und das neue genau danach einsortieren will, geht es so direkt:

Code: Alles auswählen

oBook:worksheets:add(,oSheet)
will man das neue WorkSheet vor dem aktuellen einfügen, einfach das eine Komma weg lassen:

Code: Alles auswählen

oBook:worksheets:add(oSheet)
so langsam schnalle ich es mit dem ActiveX Kram ;-)

PS: ich nutze neuerdings Excel Arbeitsmappen um Auswertungen meiner Programme besser darzustellen.
Früher habe ich dazu immer Textdateien verwendet, aber die wurden sehr schnell unübersichtlich.

Verfasst: Fr, 11. Apr 2008 19:56
von Alfred
Hallo Hubert,


mein Buch sagt

oWorksheet = oWorkbook.Worksheets.Add(oBefore,oAfter,[nCount],[nType])


Gruß
Alfred

PS: Ich hatte gerade die Lösung für dich fertig und dann nervt der
Hausmeister wegen eines Wasserschadens :(
und dann bist du auch noch schneller. Nicht mein Tag heute.

Verfasst: Fr, 11. Apr 2008 20:45
von brandelh
Hi Alfred,

danke dass du für mich gesucht hast !