Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: robertpp am 31.08.06 - 08:39:09

Titel: Excel copy Sheet + after:=
Beitrag von: robertpp am 31.08.06 - 08:39:09
Guten Morgen,

Kann mir bitte jemand weiterhelfen.
Ich hab das Problem, dass ich per Notes Script eine Excel-Dokument öffne und dann möchte ich das Tabellenblatt mehrmals (Anzahl vorerst unbekannt) kopieren.

Der normale Befehl ist ja im VBA:

Sheets("Tabelle1").Select
Sheets("Tabelle1").Copy After:=Sheets(1)

Nun ist aber das Problem das ja := im Notes nicht geht.

Wie kann ich jetzt ein bestehendes Blatt in diesem Exceldokument kopieren?

danke robert
Titel: Re: Excel copy Sheet + after:=
Beitrag von: Glombi am 31.08.06 - 09:06:20
Hier hat sich jemand die Mühe gemacht das schön zu beschreiben:

LDD: How to get around the ":=" that VB uses to set parameters in Lotus Notes (http://www.lotus.com/ldd/46dom.nsf/DateAllFlatweb/dc09168723293c9885256b9e004dd58b?OpenDocument)

Andreas
Titel: Re: Excel copy Sheet + after:=
Beitrag von: robertpp am 31.08.06 - 10:08:12
Hallo,

Danke Adreas, genau das hab ich gesucht.

Ich hab auch parallel weitergesucht und ebenfalls noch entdeckt, dass in der VBA Hilfe das so drinnen steht:

Code
Copy-Methode, wie sie auf die Objekte Chart, Charts, Sheets, Worksheet und Worksheets angewendet wird.

Kopiert das Blatt an eine andere Position in der Arbeitsmappe.

Ausdruck.Copy(Before, After)

Ausdruck   Erforderlich. Ein Ausdruck, der eines der o. a. Objekte zurückgibt.

Before  Optionaler Variant-Wert. Das Blatt, vor das dieses Blatt kopiert wird. Sie können Before nicht angeben, wenn Sie After angeben.

After   Optionaler Variant-Wert. Das Blatt, hinter das dieses Blatt kopiert wird. Sie können After nicht angeben, wenn Sie Before angegeben haben.

Anmerkung
Wenn Sie weder Before noch After angeben, erstellt Microsoft Excel eine neue Arbeitsmappe, die das kopierte Blatt enthält.

Dort wird es ebenfalls ohne ":=" beschireben und mit "()"

Es ist aber sinnvoll es so zu machen wie im Link beschrieben. Anders kann es nämlich zu Probleme kommen.

Danke und Gruss Robert
Titel: Re: Excel copy Sheet + after:=
Beitrag von: robertpp am 31.08.06 - 12:16:22
Hallo,

Ich hab leider ein kleines Problem noch!!

Copy verhält sich nicht wie Add.

Kann mal bitte jemand das mit einem Agent ausprobieren:

Sub Initialize
   Dim xlApp As Variant
   Dim xlsheet As Variant
   Dim xlsheet1 As Variant
   Dim file As String
   
   file ="C:\temp\Dienstreiseliste.xls"
   
   Set xlApp = CreateObject("Excel.Application")
   xlApp.Visible = False
   xlApp.Visible = True
   xlApp.Workbooks.Open ( file )
   Set xlsheet = xlApp.ActiveWorkbook.Worksheets(1)   
   xlApp.ActiveWorkbook.Sheets("Tabelle1").Select
   
   Dim after As Variant
   Set after = xlApp.Workbooks(1).Worksheets(1)
   Set xlsheet1 = xlApp.worksheets(1).Copy(Null,after)
   
End Sub

Ich bekomme bei der roten Zeile immer ein "type mismatch".
Aber er kopiert trotzdem das erste Tabellenblatt und sogar richtig (danach)

Oder sieht jemand einen Fehler?
danke Robert
Titel: Re: Excel copy Sheet + after:=
Beitrag von: LN4ever am 31.08.06 - 12:28:23
Was passiert denn, wenn du das NULL einfach wegläßt, also

Set xlsheet1 = xlApp.worksheets(1).Copy(,after)

Wenn du das NULL-Element brauchst, mußt du es deklarieren, also z.B.
Dim v_before as Variant
v_before=NULL

Set xlsheet1 = xlApp.worksheets(1).Copy(v_before,after)
Titel: Re: Excel copy Sheet + after:=
Beitrag von: Glombi am 31.08.06 - 12:32:29
Anstelle von

  Set xlsheet1 = xlApp.worksheets(1).Copy(Null,after)

ein


 Set xlsheet1 = xlApp.activeworkbook.worksheets.Copy(Null,after)


Andreas
Titel: Re: Excel copy Sheet + after:=
Beitrag von: robertpp am 31.08.06 - 12:51:16
@Andreas:
Das hatte ich zuvor schon drinnen stehen und leider gleicher Effekt.


@LN4ever:
Ist das gleiche Ergebnis. Leider auch Fehler.

Habt ihr es bei euch testen können? Vielleicht geht es bei euch?

Mir kommt das nur sehr komisch vor warum er die Tabelle kopiert und anschließend kommt der Fehler!

Ich denke es liegt vielleicht an dem "Set xlsheet1 =" weil das "xlApp.activeworkbook.worksheets.Copy(Null,after)"
 macht er ja richtig.
Titel: Re: Excel copy Sheet + after:=
Beitrag von: Glombi am 31.08.06 - 12:56:54
Mit

Call xlApp.activeworkbook.worksheets.Copy(Null,after)

gehts logischerweise. Wir rufen ja eine Methode auf und setzen kein Objekt.

Andreas
Titel: Re: Excel copy Sheet + after:=
Beitrag von: robertpp am 31.08.06 - 13:11:42
Hallo Andreas,

Ja das reicht mir dann auch.
Ans Call hab ich garnicht gedacht.
Setze in der Zeile danach einfach das xlssheet wieder:

   Set xlsheet = xlApp.ActiveWorkbook.ActiveSheet

danke ich hoffe das ich jetzt keine Probleme mehr bekomme.

danke robert