Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1532to1536
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variables Kopieren

Variables Kopieren
02.01.2017 17:07:23
TCO99
Hallo zusammen,
ich habe in einer Datei mehrere Tabellenblätter. Wenn ich ein Makro anstoße, soll es schauen, welche dieser Tabellenblätter noch da sind und diese als eine neue Datei ablegen.
Es sollen aber nicht alle Tabellenblätter der Datei kopiert werden, sondern nur die Tabellenblätter „Tabelle1“, „Tabelle2“, „Tabelle3“ bis „Tabelle10“. Und es kann sein, dass einige Tabellenblätter nicht mehr vorhanden sind.
Ich habe eine Beispielmappe erstellt, in der bereits ein Makro hinterlegt ist. Das Makro kopiert bisher nur das Blatt „Tabelle1“ aber nicht die weiteren Blätter, wenn diese noch vorhanden sind.
https://www.herber.de/bbs/user/110292.zip
Die benötigte Intelligenz des Codes ist es, dass es verschiedene Tabellenblätter zu einer neuen Datei zusammenfügt & ablegt aber dabei in der Lage ist, zu erkennen, welche der Tabellenblätter nicht mehr da sind und daher auch nicht versucht, diese mit zu kopieren.
Wie müsste der Code lauten?
Dank und Gruß
Erdoðan
PS: Feedback ist selbstverständlich.

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variables Kopieren
02.01.2017 17:58:28
Michael
Hallo!
Folgenden Code anstatt Deines Codes in der Bsp-Mappe (in Modul 1):
Sub TabellenInNeueDateiKopieren()
Const PFAD As String = "C:\Test\" 'Schließenden "\" beachten!
Const DATEI As String = "NeueDatei.xls"
Dim WbQuell As Workbook: Set WbQuell = ThisWorkbook
Dim WbZiel As Workbook, ZuKopierendeTabellen, i&, Blatt$
ZuKopierendeTabellen = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4", _
"Tabelle5", "Tabelle6", "Tabelle7", "Tabelle8", "Tabelle9", "Tabelle10")
Application.ScreenUpdating = False
Set WbZiel = Workbooks.Add
With WbZiel
.Worksheets(1).Name = "Del"
For i = LBound(ZuKopierendeTabellen) To UBound(ZuKopierendeTabellen)
Blatt = ZuKopierendeTabellen(i)
If BlattDa(Blatt) Then WbQuell.Worksheets(Blatt).Copy _
after:=.Worksheets(.Worksheets.Count)
Next i
Application.DisplayAlerts = False
.Worksheets(1).Delete
.SaveAs PFAD & DATEI
.Close
Application.DisplayAlerts = True
End With
End Sub
Function BlattDa(T As String) As Boolean
Dim Ws As Worksheet
BlattDa = False
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = T Then
BlattDa = True: Exit Function
End If
Next Ws
End Function
Passt?
LG
Michael
Anzeige
AW: Variables Kopieren
02.01.2017 18:08:14
TCO99
Hallo Michael,
vorab vielen Dank für deine Hilfe.
Es kommt zu folgendem Phänomen: die Tabellenblätter 2 und 3 werden doppelt kopiert und abgelegt.
Aber was schon funktioniert ist, dass gelöschte Tabellenblätter zu keinem Fehler führen, nicht mitkopiert werden.
Userbild
LG
Erdogan
Ist nur eine Frage der Einstellung ;-)...
02.01.2017 18:34:34
Michael
... Denn ich öffne eine neue Mappe Standard-mäßig mit nur einem Tabellenblatt; wenn Du diese Einstellung nicht änderst werden aber einer neuen Mappe immer drei (!) neue Blätter hinzugefügt... Dadurch hast Du hier einen Namenskonflikt... Doppelt kopiert wird allerdings nichts.
Dh. entweder änderst Du in den Excel Optionen, dass neue Mappen immer nur mit einem Blatt erstellt werden, oder Du musst drei Blätter löschen, mein Code löscht aktuell nur eines; im Code müsstest Du so ergänzen...
Worksheets(1).Name = "Del1"
Worksheets(2).Name = "Del2"
Worksheets(3).Name = "Del3"
... Und weiter unten dann

.Worksheets(1).Delete
.Worksheets(2).Delete
.Worksheets(3).Delete
Alles klar?! :-)
Lg
Michael
Anzeige
AW: Ist nur eine Frage der Einstellung ;-)...
02.01.2017 20:03:42
TCO99
Hallo Michael,
ich teste es und gebe dann Feedback. Aber ich bin bereits jetzt überzeugt von der Erklärung :-)
Viele Grüße
Erdogan
ts... ts... was nicht alles so möglich ist...
02.01.2017 22:53:22
Michael
@ Case, ... aber wer sieht sich schon die Parameter der Workbooks.Add-Methode an ;-)
@ TE, mit der Ergänzung von Case dann so (statt meiner zuvor genannten Adaptierung):
Sub TabellenInNeueDateiKopieren()
Const PFAD As String = "C:\Test\" 'Schließenden "\" beachten!
Const DATEI As String = "NeueDatei.xls"
Dim WbQuell As Workbook: Set WbQuell = ThisWorkbook
Dim WbZiel As Workbook, ZuKopierendeTabellen, i&, Blatt$
ZuKopierendeTabellen = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4", _
"Tabelle5", "Tabelle6", "Tabelle7", "Tabelle8", "Tabelle9", "Tabelle10")
Application.ScreenUpdating = False
Set WbZiel = Workbooks.Add xlWBATWorksheet
With WbZiel
.Worksheets(1).Name = "Del"
For i = LBound(ZuKopierendeTabellen) To UBound(ZuKopierendeTabellen)
Blatt = ZuKopierendeTabellen(i)
If BlattDa(Blatt) Then WbQuell.Worksheets(Blatt).Copy _
after:=.Worksheets(.Worksheets.Count)
Next i
Application.DisplayAlerts = False
.Worksheets(1).Delete
.SaveAs PFAD & DATEI
.Close
Application.DisplayAlerts = True
End With
End Sub
Function BlattDa(T As String) As Boolean
Dim Ws As Worksheet
BlattDa = False
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = T Then
BlattDa = True: Exit Function
End If
Next Ws
End Function 
LG
Michael
Anzeige
wirklich ? bei Office 10
03.01.2017 08:00:54
robert
Workbooks.Add-Methode (Excel)
Office 2013 and later
Erstellt eine neue Arbeitsmappe. Die neue Arbeitsmappe wird als aktive Arbeitsmappe verwendet.
Gruß
robert
Ja, dachte ich auch, aber wenn's Case sagt...
03.01.2017 08:26:05
Michael
... tu ich mir schwer zu zweifeln ;-)!
Ich teste das aber sobald ich am Rechner sitze, ich hab sowieso nur 2010...
Lg
Michael
Ja, klappt (natürlich) auch in XL 2010! LG und owT
03.01.2017 09:01:26
Michael
Variables Kopieren
03.01.2017 09:14:14
TCO99
Hallo zusammen,
bedeutet das, dass ich die Erweiterung unter OfficeXP gar nicht anwenden kann?
Wenn ich den vorgeschlagenen Code dennoch hinterlege, wird die Erweiterung rot dargestellt. Das bedeutet doch, dass es bei Ausführung zu einem Fehler kommen wird (Syntax-Fehler).
Userbild
Gruß
Erdogan
Anzeige
Kann sein, dass es bei Office XP NICHT klappt...
03.01.2017 09:28:22
Michael
Erdogan,
...aber dann bleibt Dir immer noch der Weg meiner zweiten vorgeschlagenen Variante. Ich hab hier Excel 2010, da ist dieser Parameter bei Workbooks.Add vorhanden, Office XP kann ich leider nicht testen.
Wie gesagt, meine zweite Varianten (welche drei Blätter umbenennt und löscht) ist unabhängig von Deiner XL-Version.
LG
Michael
AW: Kann sein, dass es bei Office XP NICHT klappt...
03.01.2017 12:08:48
TCO99
Hallo Michael,
ich habe mich für deine zweite Variante entschieden, da sie versionsunabhängig funktioniert. Da im Ergebnis aus mir unerklärlichen Gründen manche Tabellenblätter gelöscht und manche nicht richtig unbenannt wurden, habe ich die Löschung der Tabellenblätter nicht über deren Index, sondern über den Namen vorgenommen.
Die Ergebnisdatei wird angelegt, das funktioniert super. Aber wenn ich die Datei öffnen möchte, lässt sie sich zwar öffnen, aber ich muss vorher zustimmen. Bekommt man das noch weg?
https://www.herber.de/bbs/user/110301.jpg
Gruß
Erdogan
Anzeige
Ja, Fehler geht weg, siehe meine AW unten, owT
03.01.2017 14:53:09
Michael
In Office 10 funktioniert...
03.01.2017 10:46:15
Case
Hallo, :-)
... das garantiert auch. ;-)
Es ist ein Unterschied, ob ich...
Dim WbZiel As Workbook
Workbooks.Add xlWBATWorksheet
Set WbZiel = ActiveWorkbook
'....
... schreibe, oder:
Dim WbZiel As Workbook
Set WbZiel = Workbooks.Add(xlWBATWorksheet)
'....
Das Erste ist ByRef - das geht m. E. nach bei Objekten nicht (Set erzeugt ein Objekt), deshalb durch die Klammerung per ByVal. ;-)
Servus
Case

Anzeige
Na wenn's jetzt nicht klappt...! ;-), lg owT
03.01.2017 10:51:37
Michael
AW: Variables Kopieren
03.01.2017 12:56:06
Daniel
Hi
probier mal diesen Code.
hierbei werden zu alle zu kopierenden Blätter als Gruppe selektiert und so in einem Vorgang kopiert.
beim Selektieren überspringt man die die nicht vorhandenen Blätter einfach mit On Error Resume Next
Sub Ellipse2_Klicken()
Dim ZuKopierendeTabellen
Dim SelArt As Boolean
Dim TB
Application.ScreenUpdating = False
ZuKopierendeTabellen = Array("Tabelle1", "Tabelle2", "Tabelle3", "Tabelle4", _
"Tabelle5", "Tabelle6", "Tabelle7", "Tabelle8", "Tabelle9", "Tabelle10")
SelArt = True
On Error Resume Next
For Each TB In ZuKopierendeTabellen
Err = 0
Sheets(TB).Select SelArt
If Err = 0 Then SelArt = False
Next
On Error Goto 0
If SelArt = False Then
ActiveWindow.SelectedSheets.Copy
With ActiveWorkbook
Application.DisplayAlerts = False
.SaveAs Filename:=("C:\Test" & "\" & "NeueDatei.xls")
.Close
Application.DisplayAlerts = True
End With
Sheets("Start").Select
End If
Application.ScreenUpdating = True
End Sub
die Variable SelArt ist dafür da, um die Selektionsmethode umzuschalten.
ist der Parameter von .Select ein FALSE, so entspricht das einer Selektion mit gedrückter STRG-Taste.
ist der Parameter von .Select ein TRUE oder er fehlt, so entspricht das einer nomalen Selektion.
Gruß Daniel
Anzeige
AW: Variables Kopieren
03.01.2017 14:37:53
TCO99
Hallo Daniel,
ich bedanke mich für die Ergänzung und Erklärung.
Ich habe es umgesetzt und es funktioniert genauso wie die Lösung von Michael, danke sehr.
Als Laie erkenne ich natürlich keinen Unterschied.
Beim Öffnen der neuen Datei bekomme ich weiterhin diese Meldung:
https://www.herber.de/bbs/user/110301.jpg
Hast du dafür eine Erklärung?
Gruß
Erdogan
Fehlermeldung kommt aufgrund des Dateityps...
03.01.2017 14:46:44
Michael
Erdogan,
...denn Du speicherst als .xls-Datei - seit Office 2007 gibt's die aber so nicht mehr, sondern in der Form .xlsx.
Ändere

.SaveAs Filename:=("C:\Test" & "\" & "NeueDatei.xls")
entsprechend ab in
.SaveAs Filename:=("C:\Test" & "\" & "NeueDatei.xlsx")
LG
Michael
Anzeige
AW: Fehlermeldung kommt aufgrund des Dateityps...
03.01.2017 14:52:58
TCO99
Hallo Michael,
vielen Dank!
LG
Erdogan
Geschafft! ;-), gern, lg und owT
03.01.2017 14:54:15
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige