Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1040to1044
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

Aus kopierten Tabellenblättern neue Dateien erstel

Aus kopierten Tabellenblättern neue Dateien erstel
17.01.2009 16:40:00
Peter
Hallo Leute, ich habe ein Excel Problem und hoffe es ist mittels VBA zu lösen.
Ich muss aus 200 Dateien 2 bestimmte Tabellenblätter kopieren. Diese kopierten Tabellenblätter einer jeden Datei sollen in eine Vorlagendatei kopiert werden und anschließend als neue Datei gespeichert werden. (Es sollen also quasi 200 neue Dateien auf Basis der Vorlagendatei entstehen)
Die Tabellenblätter sind alle gleich aufgebaut; der Name der zur Speicherung benutzt werden soll, steht in einer Zelle des ersten zu kopierenden Tabellenblattes.
Es sollte also folgendes passieren:
1. Datei öffnen
2. Tabellenblätter kopieren
3. Kopierte Tabellenblätter in Vorlagendatei einfügen
4. Vorlagendatei unter dem Namen, der in der Zelle des 1. Tabellenblattes steht, speichern.
Leider bin ich ein absoluter Neuling auf dem VBA Gebiet…ich wäre auch super dankbar, wenn ihr mir helfen könntet.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus kopierten Tabellenblättern neue Dateien erstel
17.01.2009 16:47:00
Ramses
Hallo
"...1. Datei öffnen..."
Wo sind die Dateien ?
Alle in einem Ordner oder in verschiedenen
"...2. Tabellenblätter kopieren..."
Wie heissen die Tabellen ?
Alle gleich oder haben die unterschiedliche Namen
Wenn alle unterschiedlichen Namen, stehen die Tabellen immer am gleichen Platz
"...3. Kopierte Tabellenblätter in Vorlagendatei einfügen..."
Wie heisst die Vorlagendatei
Wo ist die gespeichert
Sollen die beiden Tabellen aus den 200 Dateien IN der GLEICHEN Vorlagendate gespeichert werden
ODER
Soll immer eine Vorlage genommen werden und in DIESE Vorlage jeweils die beiden Tabellen kopiert werden
"...4. Vorlagendatei unter dem Namen, der in der Zelle des 1. Tabellenblattes steht, speichern..."
Aus welchem Tabellenblatt:
Dasjenige das kopiert wird (Welches ist dann das erste Tabellenblatt ?)
Oder aus dem 1. Tabellenblatt in der Vorlage,... dann hast du 200 Dateien die alle gleich heissen
Gruss Rainer
Anzeige
AW: Aus kopierten Tabellenblättern neue Dateien erstel
17.01.2009 17:52:00
Tino
Hallo,
hier mal ein Beispiel, Code von einer Datei ausführen die nicht im Ordner deiner Dateien liegt und auch keinen Namen verwenden die eine Datei schon verwendet.
Die Vorgaben musst Du im Code noch anpassen, Kommentare stehen im Code.
Sub SucheDatei()
Dim Fso, Ordner, varDatei
Dim SucheDatei As String, strVorL As String, strDateien As String
Dim strSpeicherOrt As String
Dim myVorLage As Workbook, tempDatei As Workbook
Dim myTabelle(1) As String

strVorL = "J:\1 Forum\TestVorlage.xlt" 'Pfad für Vorlage 
strDateien = "J:\1 Forum\Vorlage" 'wo Deine Dateien liegen 
strSpeicherOrt = "C:\NeuerOrdner\" 'wo die Dateien hin sollen 
myTabelle(0) = "Tabelle1" 'erste Tabelle die kopiert werden soll 
myTabelle(1) = "Tabelle2" 'zweite Tabelle die kopiert werden soll 
SucheDatei = ".xls" 'Suchfilter, hier Exceldateien bis xl2003 

With Application
 .ScreenUpdating = False
 .StatusBar = "Bitte warten"
        
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set Ordner = Fso.getfolder(strDateien)
        
        'Schleife über alle Dateien im Ordner 
        For Each varDatei In Ordner.Files
          'Dateifilter, Platzhalter verwenden 
         If varDatei Like "*" & SucheDatei Then
            Set myVorLage = Workbooks.Open(strVorL)
            Set tempDatei = Workbooks.Open(varDatei, , True)
        
            tempDatei.Sheets(myTabelle).Copy _
            After:=myVorLage.Sheets(myVorLage.Sheets.Count)
            
            myVorLage.SaveAs strSpeicherOrt & tempDatei.Sheets(myTabelle(0)).Range("A1") & ".xls"
            
            
            tempDatei.Close False
            myVorLage.Close False
         End If
        Next varDatei
   
    .StatusBar = False
    .ScreenUpdating = True
End With


End Sub


Gruß Tino

Anzeige
getestet unter xl2007 oT.
17.01.2009 18:05:00
Tino
noch was...
17.01.2009 18:31:38
Tino
Hallo,
noch eine Anmerkung.
in der Zeile
myVorLage.SaveAs strSpeicherOrt & tempDatei.Sheets(myTabelle(0)).Range("A1") & ".xls
musst Du in Range("A1") die Zelle anpassen, wo der Speichername steht.
Natürlich dürfen nur Namen verwendet werden die als Dateinamen zulässig sind ;-)
Gruß Tino
AW: noch was...
17.01.2009 19:13:45
Peter
Super, vielen Dank für die schnelle Hilfe...das hätte ich in 100 Jahren nicht hinbekommen...
Jetzt sind mir nur noch zwei Sachen aufgefallen:
1. Beim Kopieren in die Vorlage werden folgende Meldungen ausgegeben:
"Diese Datei enthält Verknüpfungen zu anderen Datenquellen..."
-- die Dateien sollen aber nicht akutalisiert werden
"Die Formel, die eingefügt werden soll enthält einen Namen, der bereits in der Zieltabelle vorhanden ist. Soll die vorhandene Definition verwendet werden"
-- dies sollte bejaht werden
Kann man dies mit einbauen?
2. Die neuen Dateinamen setzen sich aus dem Wort "Speichern" und der Nummer zusammen, also bspw. "Speichern36". Kann man das Wort "Speichern" weglassen, sodass nur die Nummer im Dateinamen erscheint?
Vielen Dank.
Gruß
P
Anzeige
AW: noch was...
17.01.2009 19:35:13
Tino
Hallo,
habe bei mir mal externe Verknüpfungen eingefügt, bei mir kommt solch eine Meldung nicht.
Versuche es mal hiermit, kann es aber nicht versprechen,
müsste dies unter Deiner Version testen und die habe ich jetzt im Moment nicht zur Verfügung.
Option Explicit

Sub SucheDatei()
Dim Fso, Ordner, varDatei
Dim SucheDatei As String, strVorL As String, strDateien As String
Dim strSpeicherOrt As String, strDateiName As String
Dim myVorLage As Workbook, tempDatei As Workbook
Dim myTabelle(1) As String
Dim myCalc As Integer

strVorL = "J:\1 Forum\TestVorlage.xlt" 'Pfad für Vorlage 
strDateien = "J:\1 Forum\Vorlage" 'wo Deine Dateien liegen 
strSpeicherOrt = "C:\NeuerOrdner\" 'wo die Dateien hin sollen 
myTabelle(0) = "Tabelle1" 'erste Tabelle die kopiert werden soll 
myTabelle(1) = "Tabelle2" 'zweite Tabelle die kopiert werden soll 
SucheDatei = ".xls" 'Suchfilter, hier Exceldateien bis xl2003 

With Application
  myCalc = .Calculation
 .EnableEvents = False
 .Calculation = xlCalculationManual
 .ScreenUpdating = False
 .DisplayAlerts = False
 .StatusBar = "Bitte warten"
        
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set Ordner = Fso.getfolder(strDateien)
        
        'Schleife über alle Dateien im Ordner 
        For Each varDatei In Ordner.Files
          'Dateifilter, Platzhalter verwenden 
         If varDatei Like "*" & SucheDatei Then
            Set myVorLage = Workbooks.Open(strVorL)
            Set tempDatei = Workbooks.Open(varDatei, , True)
        
            tempDatei.Sheets(myTabelle).Copy _
            After:=myVorLage.Sheets(myVorLage.Sheets.Count)
            strDateiName = Replace(tempDatei.Sheets(myTabelle(0)).Range("A1"), "Speichern", "")
            
            myVorLage.SaveAs strSpeicherOrt & strDateiName & ".xls"
            
            
            tempDatei.Close False
            myVorLage.Close False
         End If
        Next varDatei
     
     
    .Calculation = myCalc
    .EnableEvents = True
    .StatusBar = False
    .DisplayAlerts = True
    .ScreenUpdating = True
End With


End Sub


Gruß Tino

Anzeige
und noch was...
17.01.2009 20:00:00
Tino
Hallo,
eventuelle mach noch aus der Zeile
Set tempDatei = Workbooks.Open(varDatei, , True)
diese

Set tempDatei = Workbooks.Open(varDatei, True, True)

Gruß Tino
AW: und noch was...
17.01.2009 21:10:15
Peter
Wow, ich bin sprachlos....Vielen Dank und viele Grüße
P
AW: und noch was...
18.01.2009 16:20:11
Peter
Hallo ich hab zu dem Makro nochmals ne Frage:
Wenn es anstelle von zwei Tabellenblätter nun vier sind, die kopiert werden sollen, wie muss ich hierzu den Code verändern?
Ich habe probiert 2 weitere mysheet variablen zu deklarieren, aber es kommt nun eine Fehlermeldung: "mehrfachdeklaration im akutellen Gültigkeitsbereich"
Option Explicit

Sub SucheDatei()
Dim Fso, Ordner, varDatei
Dim SucheDatei As String, strVorL As String, strDateien As String
Dim strSpeicherOrt As String
Dim myVorLage As Workbook, tempDatei As Workbook
Dim mytabelle(1) As String
Dim mytabelle(2) As String    'dies wurde von mir eingetragen
Dim mytabelle(3) As String    'dies wurde von mir eingetragen
strVorL = "C:\Users\Der Don\Desktop\Makrotest\Vorlage\vorlage.xls" 'Pfad für Vorlage
strDateien = "C:\Users\Der Don\Desktop\Makrotest\DCF" 'wo Deine Dateien liegen
strSpeicherOrt = "C:\Users\Der Don\Desktop\Makrotest\Speichern\" 'wo die Dateien hin sollen
mytabelle(0) = "cash flow (Q1_2009)" 'erste Tabelle die kopiert werden soll
mytabelle(1) = "Ausgaben Planung (Q1_2009)" 'zweite Tabelle die kopiert werden soll
mytabelle(2) = "Neu"          'dies wurde von mir eingetragen
mytabelle(3) = "Neu1"         'dies wurde von mir eingetragen
SucheDatei = ".xls" 'Suchfilter, hier Exceldateien bis xl2003
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.StatusBar = "Bitte warten"
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Ordner = Fso.getfolder(strDateien)
'Schleife über alle Dateien im Ordner
For Each varDatei In Ordner.Files
'Dateifilter, Platzhalter verwenden
If varDatei Like "*" & SucheDatei Then
Set myVorLage = Workbooks.Open(strVorL)
Set tempDatei = Workbooks.Open(varDatei, , True)
tempDatei.Sheets(myTabelle).Copy _
After:=myVorLage.Sheets(myVorLage.Sheets.Count)
myVorLage.SaveAs strSpeicherOrt & tempDatei.Sheets(tabelle(0)).Range("c5") & ".xls"
tempDatei.Close False
myVorLage.Close False
End If
Next varDatei
.StatusBar = False
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub


Anzeige
AW: und noch was...
18.01.2009 17:16:00
Tino
Hallo,
das ist eine Area, die kann man in diesem Fall nur einmal Dimensionieren.
Ungetestet:
Mach aus den Zeilen
Dim mytabelle(1) As String
Dim mytabelle(2) As String 'dies wurde von mir eingetragen
Dim mytabelle(3) As String 'dies wurde von mir eingetragen

nur diese eine
Dim mytabelle(3) As String
Gruß Tino

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige