PDA

Vollständige Version anzeigen : Problem mit Arbeitsblatt kopieren


rednitz123
23.05.2013, 07:30
Hallo ich versuche mit angehängtem Code ein Arbeitsblatt in eine andere Mappe zu kopieren. Bekomme aber leider die Fehlermeldung " Die Methode ´Copy´für das Object "_Worksheet" ist fehlgeschlagen... Kann mir aber nicht erklären warum? Danke schon mal
Gruß Michael

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> tt()
<span class="TOKEN">Dim</span> xlNeu <span class="TOKEN">As</span> Object
&nbsp;
<span class="TOKEN">Dim</span> wbAlt <span class="TOKEN">As</span> Workbook
<span class="TOKEN">Dim</span> wsAlt <span class="TOKEN">As</span> Worksheet
&nbsp;
<span class="TOKEN">Dim</span> wbNeu <span class="TOKEN">As</span> Workbook
<span class="TOKEN">Dim</span> wsNeu <span class="TOKEN">As</span> Worksheet
&nbsp;
<span class="TOKEN">Set</span> xlNeu = CreateObject(&quot;Excel.Application&quot;)
xlNeu.Visible = <span class="TOKEN">True</span>
&nbsp;
<span class="TOKEN">Set</span> wbAlt = Workbooks(&quot;Mayr.xls&quot;)
<span class="TOKEN">Set</span> wsAlt = wbAlt.Sheets(&quot;Rechnung&quot;)
<span class="TOKEN">Set</span> wbNeu = xlNeu.Workbooks.Open(ActiveWorkbook.Path &amp; &quot;\rechnungen.xlsx&quot;)
<span class="TOKEN">Set</span> wsNeu = wbNeu.Sheets(&quot;Daten&quot;)
wsAlt.Activate
wsAlt.Copy After:=wsNeu
&nbsp;
wbNeu.Close <span class="TOKEN">False</span>
<span class="TOKEN">Set</span> wbNeu = <span class="TOKEN">Nothing</span>
xlNeu.Quit
<span class="TOKEN">Set</span> xlNeu = <span class="TOKEN">Nothing</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Hajo_Zi
23.05.2013, 07:56
Hallo Michael,

bei einem offenen Workbook muss kein Ordner angegeben werden
Set wbNeu = xlNeu.Workbooks.Open(ActiveWorkbook.Path & "\rechnungen.xlsx")

<img src="http://www.hajo-excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/" onclick="window.open(this.href);return false"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

JohnDoe
23.05.2013, 08:12
Hi,

das "After:" bezieht sich aber auf das Aktuelle Workbook und auf das neu erstellte.
"After" sagt dem Copy-Befehl nur, kopiere das ausgewählte Blatt bitte hinter dieses Blatt.

Ich vermute mal du willst, dass Blatt aus dem alten Worksheet ins neue kopieren.

Dann solltest du das :After ergänzen durch wbNeu.ActiveSheet oder wbNeu.Sheet(x) wenn du weißt an welche Position.

Ich weiß nicht was du genau möchtest, aber du erzeugst eine neue Excel-Datei und öffnest zwei weitere. Ich denke du willst wohl eher die Daten aus "Mary.xls" in "rechnungen.xls" kopieren, oder?

Luschi
23.05.2013, 08:24
Hallo Michael,

so kann das nichts werden, da Du - wie JohnDoe schon andeutete - eine neue Excelinstanz aufmachts, die sich beide nicht kennen und deshalb der Copy-Befehl die andere Arbeitsmappe nicht kennt. Bei mir klappt das so:Sub tt()
Dim wbAlt As Workbook
Dim wsAlt As Worksheet

Dim wbNeu As Workbook
Dim wsNeu As Worksheet

Set wbAlt = ThisWorkbook
Set wsAlt = wbAlt.Sheets("Rechnung")
Set wbNeu = Application.Workbooks.Open(ActiveWorkbook.Path & "\rechnungen.xlsx")
Set wsNeu = wbNeu.Sheets("Daten")
wsAlt.Activate
wsAlt.Copy After:=wsNeu

'wenn schon dann auch speichern!
wbNeu.Close True

Set wsNeu = Nothing
Set wbNeu = Nothing
Set wsAlt = Nothing
Set wbAlt = Nothing
End SubGruß von Luschi
aus klein-Paris

rednitz123
23.05.2013, 10:07
Hallo Ihr alle... Luschis Lösung war die Passende :) Danke euch allen. Auch für die Erklärung :)
Gruß Michael