PDA

Vollständige Version anzeigen : Tabellblatt ans Ende verschieben


Feng Bo
21.08.2017, 11:11
Hallo,

ich möchte per Makro das aktive Tabellenblatt in eine andere Datei verschieben und dort ans Ende stellen.

Mit diesem Code versuche ich es:

Sub Archiv()
If MsgBox("Soll das Tabellenblatt " & ActiveSheet.Name & " wirklich archiviert werden?", _
vbYesNo + vbQuestion, "Wirklich archivieren?") = vbNo Then GoTo Cancel

Workbooks.Open Filename:="TEST.XLS"
ThisWorkbook.Activate
ActiveSheet.Move After:=Workbooks("ORIG.XLS").Sheets(Sheets.Count)
Workbooks("TEST.XLS").Save
Workbooks("TEST.XLS").Close
MsgBox "Archivierung abgeschlossen."
Cancel:
End Sub


Es klappt, allerdings fügt mir Excel das Tabellenblatt entweder als vorletzten Reiter oder sogar ganz in der Mitte ein. Definitiv aber nicht am Ende.

Was habe ich übersehen? Vielen Dank vorab und Grüße!

WS-53
21.08.2017, 11:16
Hallo,

du willst an das Ende von TEXT.XLS anfügen, zählst aber wie viele Tabellenblätter in ORIG.XLS enthalten sind. Du müsst die von TEST.XLS zählen.

RPP63neu
21.08.2017, 11:17
Moin!
After:=Workbooks("ORIG.XLS").Sheets(Sheets.Count)
zählt die Sheets in der aktiven Mappe!
(also der Test.xls)
After:=Workbooks("ORIG.XLS").Sheets(Workbooks("ORIG.XLS").Sheets.Count)
(oder besser gleich mit einer With-Klammer)

Gruß Ralf

Feng Bo
21.08.2017, 12:00
Hallo und danke, ich habe mich da irgendwie verwurschtelt...

Also ORIG.XLS ist die Originaldatei. Aus dieser soll das aktive Tabellenblatt an das Ende von TEST.XLS verschoben werden.

LG

Feng Bo
21.08.2017, 12:24
Also, ich habs (dank eurer Hilfe) rausgefunden. Thema damit gelöst.

Hier die Lösung:

Sub Archiv()
If MsgBox("Soll das Tabellenblatt " & ActiveSheet.Name & " wirklich archiviert werden?", _
vbYesNo + vbQuestion, "Wirklich archivieren?") = vbNo Then GoTo Cancel

Workbooks.Open Filename:="C:PfadTEST.XLS"
ThisWorkbook.Activate
ActiveSheet.Move After:=Workbooks("TEST.XLS").Sheets(Workbooks("TEST.XLS").Sheets.Count)
Workbooks("TEST.XLS").Save
Workbooks("TEST.XLS").Close
MsgBox "Archivierung abgeschlossen."
Cancel:
End Sub


Vielen Dank und Grüße!

RPP63neu
21.08.2017, 12:39
Ich würde es so schreiben (ohne Sprungziel und mit With-Klammer):
<pre style='border:thin solid #000000; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Sub</span> Archiv() <span style='color:#0000EE'>If</span> MsgBox(<span style='color:#FF0000'>&quot;Soll das Tabellenblatt &quot;</span> & ActiveSheet.Name & <span style='color:#FF0000'>&quot; wirklich archiviert werden?&quot;</span>, _ vbYesNo + vbQuestion, <span style='color:#FF0000'>&quot;Wirklich archivieren?&quot;</span>) = vbYes <span style='color:#0000EE'>Then</span> Workbooks.Open Filename:=<span style='color:#FF0000'>&quot;C:\Pfad\TEST.XLS&quot;</span> <span style='color:#0000EE'>With</span> ActiveWorkbook ThisWorkbook.ActiveSheet.Move After:=.Sheets(.Sheets.Count) .Save .Close <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>If</span> MsgBox <span style='color:#FF0000'>&quot;Archivierung abgeschlossen.&quot;</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span></pre>

Gruß Ralf

Feng Bo
21.08.2017, 12:43
Ich lerne gerne dazu.
Mit With wird wohl der Code verschlankt, was zu beschleunigtem Code-Ablauf führt, ja?
Aber warum ohne Sprungziel?

LG

RPP63neu
21.08.2017, 12:55
1. ja, hat aber nix mit dem Schlanksein zu tun.
Die Referenzierung wird nur einmal hergestellt.
2. Ist schlicht nicht notwendig, wenn man die 1. Msgbox auswertet.
Es hat sich übrigens bei mir ein Flüchtigkeitsfehler eingeschlichen.
Besser so:
<pre style='border:thin solid #000000; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Sub</span> Archiv() <span style='color:#0000EE'>If</span> MsgBox(<span style='color:#FF0000'>&quot;Soll das Tabellenblatt &quot;</span> & ActiveSheet.Name & <span style='color:#FF0000'>&quot; wirklich archiviert werden?&quot;</span>, _ vbYesNo + vbQuestion, <span style='color:#FF0000'>&quot;Wirklich archivieren?&quot;</span>) = vbYes <span style='color:#0000EE'>Then</span> Workbooks.Open Filename:=<span style='color:#FF0000'>&quot;C:\Pfad\TEST.XLS&quot;</span> <span style='color:#0000EE'>With</span> ActiveWorkbook ThisWorkbook.ActiveSheet.Move After:=.Sheets(.Sheets.Count) .Save .Close <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> MsgBox <span style='color:#FF0000'>&quot;Archivierung abgeschlossen.&quot;</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>If</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span></pre>

Gruß Ralf

Feng Bo
21.08.2017, 14:01
Ah okay, vielen Dank!
Ja, den "Flüchtigkeitsfehler" habe ich beim Testen bereits gemerkt und ausgebügelt^^

LG