Discussion:
Kopierte Tabellenblätter an das Ende einer neuen Tabelle stellen VBA
(zu alt für eine Antwort)
Otto Reinhardt
2005-08-03 12:26:58 UTC
Permalink
Hallo NG,

ich habe ein Problem beim Kopieren von Tabellenblättern. Ich gehe dabei
folgendermaßen vor:
Ein Schichtplan hat zunächst vier Tabellenblätter für die ersten 4 Wochen.
Wenn sie komplett ausgefüllt sind, soll per Knopfdruck ein Makro ausgelöst
werden, das aus einer weiteren Exceltabelle (Vorlage.xls) 4 neue leere
Tabellenblätter herauskopiert und ans Ende des Schichtplans stellen soll.

Mein Code schaut bis jetzt so aus:

Sub Makro kopieren()

Workbooks.Open Filename:="D:\Vorlage.xls", Editable:=True 'ruft
die leere Vorlage auf
Sheets(Array("1", "2", "3", "4")).Select
Sheets("1").Activate
Sheets(Array("1", "2", "3", "4")).Copy
After:=Workbooks("Schichtplan.xls").Sheets(Sheets.Count) ' ermittelt
die Anzahl der Blätter und stellt die Kopien ans Ende ??????

Sheets(Sheets.Count - 3).Select
'springt 3 Blätter zurück auf B2
Range("B2").Select
'und löscht den Inhalt
Selection.ClearContents

Windows("Vorlage.xls").Activate
'schließt die Vorlage
ActiveWindow.Close

End Sub


Beim ersten Ablauf des Makros funtioniert es einwandfrei. Bei wiederholten
Aufrufen werden die Kopien immer an der selben Stelle eingefügt und zwar
immer nach den ersten 4 Blättern und nicht an das Ende.
Kann mir jemand behilflich sein und wenn es geht so erkären, dass ich es als
VBA-Unkundiger auch verstehe.

Vielen Dank für Euer Bemühen

Otto
Alexander Wolff
2005-08-03 12:38:22 UTC
Permalink
Post by Otto Reinhardt
Workbooks.Open Filename:="D:\Vorlage.xls", Editable:=True
'ruft die leere Vorlage auf
Sheets(Array("1", "2", "3", "4")).Select
Sheets("1").Activate
Sheets(Array("1", "2", "3", "4")).Copy
After:=Workbooks("Schichtplan.xls").Sheets(Sheets.Count) '
ermittelt die Anzahl der Blätter und stellt die Kopien ans Ende ??????
Sheets(Sheets.Count - 3).Select
'springt 3 Blätter zurück auf B2
Range("B2").Select
'und löscht den Inhalt
Selection.ClearContents
Windows("Vorlage.xls").Activate
'schließt die Vorlage
ActiveWindow.Close
End Sub
Beim ersten Ablauf des Makros funtioniert es einwandfrei. Bei
wiederholten Aufrufen werden die Kopien immer an der selben Stelle
eingefügt und zwar immer nach den ersten 4 Blättern und nicht an das
Ende.
Kann mir jemand behilflich sein und wenn es geht so erkären, dass ich
es als VBA-Unkundiger auch verstehe.
Vielen Dank für Euer Bemühen
Otto
--
Hallo + Gruss Alexander (WinXP Home SP1 - Office 2000 SP3) 6----5----7-2
Alexander Wolff
2005-08-03 12:41:04 UTC
Permalink
Post by Otto Reinhardt
Sub Makro kopieren()
2. Da Du von "Schichtplan.xls" aus das Makro startest, weise hier
Sheets.Count
einer Variablen zu.
Post by Otto Reinhardt
Workbooks.Open Filename:="D:\Vorlage.xls", Editable:=True
'ruft die leere Vorlage auf
Sheets(Array("1", "2", "3", "4")).Select
Sheets("1").Activate
Sheets(Array("1", "2", "3", "4")).Copy
After:=Workbooks("Schichtplan.xls").Sheets(Sheets.Count)
3. Nimm statt Sheets.Count hier die o.g. Variable
'
Post by Otto Reinhardt
ermittelt die Anzahl der Blätter und stellt die Kopien ans Ende ??????
1. Sheets.Count bezieht sich durchs Öffnen auf "Vorlage", da dies aktiv ist.
--
Hallo + Gruss Alexander (WinXP Home SP1 - Office 2000 SP3) 6----5----7-2
Otto Reinhardt
2005-08-03 16:00:17 UTC
Permalink
Hallo Alexander,

vielen Dank für Deinen superschnellen Tipp. Es hat geklappt!
Ich hab etwas länger gebraucht bis ich es kapiert und umgesetzt habe, aber
ich ich hab ja geschrieben ich bin in Sachen VBA ein Unwissender.

Nochmals Danke - Otto
Post by Alexander Wolff
Post by Otto Reinhardt
Sub Makro kopieren()
2. Da Du von "Schichtplan.xls" aus das Makro startest, weise hier
Sheets.Count
einer Variablen zu.
Post by Otto Reinhardt
Workbooks.Open Filename:="D:\Vorlage.xls", Editable:=True
'ruft die leere Vorlage auf
Sheets(Array("1", "2", "3", "4")).Select
Sheets("1").Activate
Sheets(Array("1", "2", "3", "4")).Copy
After:=Workbooks("Schichtplan.xls").Sheets(Sheets.Count)
3. Nimm statt Sheets.Count hier die o.g. Variable
'
Post by Otto Reinhardt
ermittelt die Anzahl der Blätter und stellt die Kopien ans Ende ??????
1. Sheets.Count bezieht sich durchs Öffnen auf "Vorlage", da dies aktiv ist.
--
Hallo + Gruss Alexander (WinXP Home SP1 - Office 2000 SP3) 6----5----7-2
Alexander Wolff
2005-08-03 16:48:23 UTC
Permalink
Post by Otto Reinhardt
vielen Dank für Deinen superschnellen Tipp. Es hat geklappt!
Ich hab etwas länger gebraucht bis ich es kapiert und umgesetzt habe,
aber ich ich hab ja geschrieben ich bin in Sachen VBA ein Unwissender.
Nimm Thomas' Lösung.

Ich wollte Dir nur sagen, dass Du die Sheets der falschen Mappe
auswertetest. :)

Hast Du bei Thomas gemerkt, dass es (fast immer) ohne Select (und oft auch
Activate) geht?
--
Hallo + Gruss Alexander (WinXP Home SP1 - Office 2000 SP3) 6----5----7-2
Thomas Ramel
2005-08-03 13:03:37 UTC
Permalink
Grüezi Otto

Otto Reinhardt schrieb am 03.08.2005
Post by Otto Reinhardt
Ein Schichtplan hat zunächst vier Tabellenblätter für die ersten 4 Wochen.
Wenn sie komplett ausgefüllt sind, soll per Knopfdruck ein Makro ausgelöst
werden, das aus einer weiteren Exceltabelle (Vorlage.xls) 4 neue leere
Tabellenblätter herauskopiert und ans Ende des Schichtplans stellen soll.
Ersetze deinen ganzen Aufruf und das Einfügen der Blätter durch die
folgende Zeile; anpassen musst Du dann ev noch das Löschen des Wertes:

Sheets.Add After:=Sheets(Sheets.Count), Type:="D:\Vorlage.xls"



Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Otto Reinhardt
2005-08-03 16:14:37 UTC
Permalink
Hallo Thomas,

auch Dir sei gedankt. Deine Lösung läuft prima und ist sogar noch kürzer als
von Alexander.
Jetzt habe ich die Qual der Wahl.

Vielen dank nochmal an euch Experten !!!


Otto
Post by Thomas Ramel
Grüezi Otto
Otto Reinhardt schrieb am 03.08.2005
Post by Otto Reinhardt
Ein Schichtplan hat zunächst vier Tabellenblätter für die ersten 4 Wochen.
Wenn sie komplett ausgefüllt sind, soll per Knopfdruck ein Makro ausgelöst
werden, das aus einer weiteren Exceltabelle (Vorlage.xls) 4 neue leere
Tabellenblätter herauskopiert und ans Ende des Schichtplans stellen soll.
Ersetze deinen ganzen Aufruf und das Einfügen der Blätter durch die
Sheets.Add After:=Sheets(Sheets.Count), Type:="D:\Vorlage.xls"
Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Loading...