Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
560to564
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
560to564
560to564
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Copy & Paste Routine
04.02.2005 12:43:12
RGasche
Hallo Leute,
ein Newbie ist nach dem ersten gelösten Problem auf den Geschmack gekommen, weitere Makros zur Erledigung von Routine-Aufgaben zu konstruieren.
Ausgangslage:
Ich habe viele viele Excel-Dateien in einem Verzeichnis, die Daten enthalten. Die Inhalte dieser Einzeldateien (z.B. 1.xls, 2.xls, 3.xls, usw.) möchte ich der Reihe nach in ein bestehendes Worksheet, das aus vielen vielen Einzelsheets (Tabellen) aufgebaut ist, einlesen. Dabei ist jede Tabelle des Worksheets identisch aufgebaut. Wie auch die Einzeldateien identisch aufgebaut sind (natürlich nicht deren Inhalt).
Die Anzahl der Einzeldateien ist allerdings variabel, so dass ich zuvor den "Endpunkt" (=die letzte Datei) definieren müßte.
Bisher habe ich die Einzeldateien der Reihe nach geöffnet, die Inhalte markiert, in die Zwischenablage kopiert, in das Ziel-Worksheet gewechselt und dort die entsprechende Tabelle angeklickt und die Daten mit "einfügen" eingefügt. Das müßte sich doch über ein Makro automatisieren lassen. Oder? Nur habe ich keine Ahnung wie.....
Kan mir jemand weiterhelfen?

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Copy & Paste Routine
04.02.2005 12:56:38
Matthias
Hallo R,
hier erst einmal eine Routine, um alle *.xls-Dateien eines Verzeichnisses auszulesen:
Sub DateienListen()
Const Verz = "c:\test"
Dim anz As Integer, i As Integer
Dim fn As String
fn = "*.xls"
With Application.FileSearch
.NewSearch
.LookIn = Verz
.FileType = msoFileTypeExcelWorkbooks
.Filename = fn
.SearchSubFolders = False
.Execute
anz = .FoundFiles.Count
For i = 1 To .FoundFiles.Count
fn = .FoundFiles(i)
MsgBox fn
'hier müsste dann die Ausleseroutine rein
Next i
End With
End Sub
Viel Spaß weiterhin,
Matthias
AW: Copy & Paste Routine
04.02.2005 14:03:03
RGasche
Hallo Matthias (again),
danke für Deine Antwort.
Die Routine soll wie folgt laufen:
markierter Datenbereich (z.B. A1:E28) aus Einzeldatei "1.xls" kopieren und in Zelle A6 von "Tabelle 1" des Worksheets (in welches die Einzeldaten kopiert werden sollen) kopieren. Danach Datenbereich aus "2.xls" in Zelle A6 von "Tabelle 2", usw.
Ich habe das bisher mit einem Monstermakro gelöst, welches jeden einzelnen Schritt jeder einzelnen Datei aufgezeichnet hat. Der Nachteil: Ändert sich die Anzahl der Einzeldateien, bzw. auch zusätzlich das Verzeichnis, so muss ich alles händisch umprogrammieren.
Daher meine Anfrage.
Weisst Du Rat?
Anzeige
AW: Copy & Paste Routine
04.02.2005 14:06:28
RGasche
Hier meine bisherige Routine-Abfrage:
Workbooks.Open Filename:= _
"G:\mikbio\gasche\Messung\SFB\DFG_0902\Apex\NO_1\NO1002A.xls"
Range("A1:E28").Select
Selection.Copy
Windows("DFG-N2O_Template.xls").Activate
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("002").Select
ActiveWindow.LargeScroll Down:=-1
Range("A6").Select
ActiveSheet.Paste

Workbooks.Open Filename:= _
"G:\mikbio\gasche\Messung\SFB\DFG_0902\Apex\NO_1\NO1004A.xls"
Range("A1:E29").Select
Application.CutCopyMode = False
Selection.Copy
Windows("DFG-N2O_Template.xls").Activate
Sheets("004").Select
ActiveWindow.SmallScroll Down:=-57
Range("A6").Select
ActiveSheet.Paste
......
Anzeige
AW: Copy & Paste Routine
04.02.2005 15:30:48
Matthias
Hallo R.,
hier mal ein Code:
Sub Import()
Dim i  As Integer
Dim fn As String
i = 1
Application.ScreenUpdating = False 'gegen das Flackern
fn = ThisWorkbook.Path & "\" & i & ".xls"
Do While Dir(fn) <> ""
Workbooks.Open Filename:=fn
ActiveWorkbook.Sheets("Tabelle1").Range("A1:E28").Copy
ThisWorkbook.Sheets("Tabelle" & i).Range("A6").PasteSpecial _
Paste:=xlPasteValues 'nur Werte einfügen
Application.DisplayAlerts = False 'Damit die Zwischenablage-Warnung nicht erscheint
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
i = i + 1
fn = ThisWorkbook.Path & "\" & i & ".xls"
Loop
Application.ScreenUpdating = True
End Sub
Öffnet die Dateien 1.xls, 2.xls, usw. im Verzeichnis der Haupmappe und kopiert die Werte des Bereiches A1:E28 nach Tabelle1, Tabelle2 usw.
Gruß Matthias
Anzeige
AW: Copy & Paste Routine
07.02.2005 11:46:05
RGasche
Danke Matthias,
aber meine Kenntnisse reichen noch nicht aus, um die Programmierung zu verstehen.
Die Einzeldateien heißen "NO1002A.xls", "NO1004A.xls, "NO1006A.xls", usw. Die Tabellen in der Hauptmappe heißen "002", "004", 006", usw. Leider kompliziert sich die Sache noch, da die Nummerierung nicht durchlaufend ist, sondern nur Dateien und dementsprechend Tabellen in der Hauptmappe mit "gerade" Zahlen vorkommen.
Besten Dank für Deine Hilfe
AW: Copy & Paste Routine
07.02.2005 15:59:17
RGasche
Danke Matthias,
aber meine Kenntnisse reichen noch nicht aus, um die Programmierung zu verstehen.
Die Einzeldateien heißen "NO1002A.xls", "NO1004A.xls, "NO1006A.xls", usw. Die Tabellen in der Hauptmappe heißen "002", "004", 006", usw. Leider kompliziert sich die Sache noch, da die Nummerierung nicht durchlaufend ist, sondern nur Dateien und dementsprechend Tabellen in der Hauptmappe mit "gerade" Zahlen vorkommen.
Besten Dank für Deine Hilfe
Anzeige
AW: Copy & Paste Routine
07.02.2005 17:46:56
Matthias
Hallo RGasche,
ok, noch ein Versuch:
Sub Import_2terVersuch()
Dim i  As Integer
Dim fn As String
Dim Bl As String
i = 1
Application.ScreenUpdating = False 'gegen das Flackern
' liest erste Datei mit dem angegebenen Muster
fn = Dir(ThisWorkbook.Path & "\NO1***A.xls")
' Solange eine Datei gefunden wurde
Do Until fn = ""
' Blattname aus Dateiname generieren
Bl = Mid(fn, 4, 3)
'Debug.Print fn, Bl
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & fn
ActiveWorkbook.Sheets("Tabelle1").Range("A1:E28").Copy
ThisWorkbook.Sheets(Bl).Range("A6").PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats 'nur Werte und Formate einfügen
ThisWorkbook.Sheets(Bl).Range("A6").PasteSpecial _
Paste:=xlPasteColumnWidths 'und Spaltenbreiten
Application.DisplayAlerts = False 'Damit die Zwischenablage-Warnung nicht erscheint
'Mappe schließen ohne zu speichern
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
i = i + 1
'nächste Datei mit dem Muster holen
fn = Dir()
'und Schleife
Loop
Application.ScreenUpdating = True
End Sub
Viel Erfolg,
Matthias
Anzeige
AW: Copy & Paste Routine
07.02.2005 18:31:55
RGasche
Hallo Matthias,
leider tut sich da überhaupt gar nichts, wenn ich das Makro aufrufe. Weder, wenn ich die Hauptmappe geöffnet habe noch, wenn ich gar keine Datei zu Beginn geöffnet habe.
Was mache ich falsch? Und ich dachte schon, ich würde so allmählich der Skriptsprache näher kommen....weit gefehlt.....
AW: Copy & Paste Routine
07.02.2005 18:41:28
Matthias
Hallo R,
Dann stimmt die Dateiauswahl mit Dir() nicht:
fn = Dir(ThisWorkbook.Path & "\NO1***A.xls")
Er sucht alle Dateien im Verzeichnis, in dem das Makro steht (ThisWorkbook.Path), die dieses Muster haben: NO1***A.xls
D.h. du musst die Hauptmappe (in der soll ja dein Makro stehen, oder?) erst einmal speichern, sonst hat ist der Wert ThisWorkbook.Path ein Leerstring und er sucht die Dateien im akt. Verzeichnis (meist "Eigene Dateien").
Gruß Matthias
Gruß Matthias
Anzeige
AW: Copy & Paste Routine
08.02.2005 09:49:18
RGasche
Hallo Matthias,
tut mir leid, aber es funktioniert noch immer nicht. Ich habe das Makro nun in die "aktuelle Datei" (=Hauptmappe) geschrieben, diese Datei geöffnet und das Makro laufen lassen.
Es wird die erste Einzeldatei "NO1002A.AFR" geöffnet aber weiter passiert nicht. Statt dessen erscheint die Fehlermeldung "Laufzeitfehler '9': Index außerhalb des gültigen Bereichs". Wenn ich auf "Debuggen" klicke, werde ich auf die folgende Zeile verwiesen:
"ActiveWorkbook.Sheets("Tabelle1").Range("A1:E28").Copy"
Ich habe schon mal ausprobiert, den Eintrag "Tabelle1" auf "002" zu ändern, allerdings ohne Erfolg. Möglicherweise liegt es daran, dass die Tabellenblätter "002", "004", "006", usw. bereits in der Hauptmappe existieren?
Anzeige
AW: Copy & Paste Routine
08.02.2005 13:37:39
Matthias
Hallo R.,
wie heißt denn das Blatt in der Datei NO1002A.AFR, dessen Daten du kopieren willst?
Oder ist es gar keine Exce-Datei? (.AFR?)
Gruß Matthias
AW: Copy & Paste Routine
08.02.2005 17:43:47
RGasche
Hallo Matthias,
das Blatt heisst genauso, wie die Datei selbst "NO1002A", "NO1004A", "NO1006A", usw.
AW: Copy & Paste Routine
08.02.2005 17:46:09
RGasche
Hallo Matthias,
ich vergas zu bemerken, dass die Einzeldateien (die mit den zu kopierenden Daten) Excel-Dateien mit der Endung ".xls" sind
AW: Copy & Paste Routine
08.02.2005 17:47:45
RGasche
Hallo Matthias,
ich vergas zu bemerken, dass die Einzeldateien (die mit den zu kopierenden Daten) Excel-Dateien mit der Endung ".xls" sind
AW: Copy & Paste Routine
08.02.2005 20:11:43
Matthias
Hallo R.,
also, folgende Voraussetzungen:
- Das Makro steht in der Datei, in die die Bereiche kopiert werden sollen
- Diese Datei hat bereits Blätter mit den Namen 002, 004, 006, ...
- in gleichen Verzeichnis stehen Dateien mit den Namen NO1002A.xls, NO1004A.xls,NO1006A.xls,...
- Diese hateien haben Blätter entsprechend ihrem Namen, also NO1002A, NO1004A, NO1006A, ...
Sub Import()
Dim i  As Integer
Dim fn As String
Dim Bl As String, Bl_Source As String
i = 1
Application.ScreenUpdating = False 'gegen das Flackern
' liest erste Datei mit dem angegebenen Muster
fn = Dir(ThisWorkbook.Path & "\NO1***A.xls")
' Solange eine Datei gefunden wurde
Do Until fn = ""
' Blattnamen aus Dateiname generieren
Bl = Mid(fn, 4, 3)          ' aus 'NO1002A.xls' mach '002'
Bl_Source = Left(fn, Len(fn) - 4) ' aus 'NO1002A.xls' mach 'NO1002A'
'Debug.Print fn, Bl
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & fn
ActiveWorkbook.Sheets(Bl_Source).Range("A1:E28").Copy
ThisWorkbook.Sheets(Bl).Range("A6").PasteSpecial _
Paste:=xlPasteValues 'nur Werte einfügen
ThisWorkbook.Sheets(Bl).Range("A6").PasteSpecial _
Paste:=xlPasteColumnWidths 'Spaltenbreite wie Quelle
Application.DisplayAlerts = False 'Damit die Zwischenablage-Warnung nicht erscheint
'Mappe schließen ohne zu speichern
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
i = i + 1
'nächste Datei mit dem Muster holen
fn = Dir()
'und Schleife
Loop
Application.ScreenUpdating = True
End Sub
Gruß Matthias
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige