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

Zusammenführen von Dateien über Makro

Zusammenführen von Dateien über Makro
Dateien
Hallo,
habe ein Makro zur Zusammenführung von Zellenwerten aus verschiedenen Exceldateien gebastelt. (Ausführung per Button TakeFocusOnClick=false). Das auch hin und wieder funktioniert. Häufig bleibt es aber bei der Ausführung hängen und Excel hängt sich auf.
Wäre super wenn sich jemand den Code anschauen könnte.
Vielen Dank im Voraus!

Sub ExcelZusammenFuehren()
Const OrdnerPfad = "C:\Ordner\"
Dim xls_Appl                              ' Excel Programm
Dim xls_Mappe                             ' Excel Arbeitsmappe
Dim xls_Blatt                             ' Excel Tabelle
Dim xls_Mappe1                             ' Excel Arbeitsmappe
Dim xls_Blatt1                             ' Excel Tabelle
Dim fso                                 ' FileSystemObject
Dim fo                                   ' Ordner (Folder)
Dim fi                                    ' Datei (File)
Dim Zeile
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(OrdnerPfad)
' ***** Excel starten *****
Set xls_Appl = CreateObject("Excel.Application")
xls_Appl.Visible = True            ' Excel sichtbar
Set xls_Mappe = ThisWorkbook ' Tabellenblatt auswählen
Set xls_Blatt = xls_Mappe.Worksheets("Auswertung Tranchenübersicht")
Zeile = 9
For Each fi In fo.Files            ' Alle Dateien im Ordner durchlaufen
If Right(UCase(fi.Name), 3) = "XLS" Then      ' Erkennen der Excel-Dateien
Set xls_Mappe1 = xls_Appl.Workbooks.Open(OrdnerPfad & fi.Name)
Set xls_Blatt1 = xls_Mappe1.Worksheets(1)
' ***** KAM
xls_Blatt1.Activate
xls_Blatt1.Range("KAM").Select    ' Bereich auswählen
xls_Appl.Selection.Copy
xls_Blatt.Activate
xls_Blatt.Range("B" & Zeile).Select    ' Aktive Zelle auswählen
xls_Mappe.ActiveSheet.PasteSpecial (xlPasteValues)
' ***** Kunde
xls_Blatt1.Activate
xls_Blatt1.Range("Kunde").Select    ' Bereich auswählen
xls_Appl.Selection.Copy
xls_Blatt.Activate
xls_Blatt.Range("C" & Zeile).Select    ' Aktive Zelle auswählen
xls_Mappe.ActiveSheet.PasteSpecial (xlPasteValues)
' ***** Jahr
xls_Blatt.Activate
xls_Blatt.Range("D" & Zeile).Select    ' Aktive Zelle auswählen
ActiveCell = xls_Blatt1.Name
' ***** Bestellte Menge
xls_Blatt1.Activate
xls_Blatt1.Range("BM").Select    ' Bereich auswählen
xls_Appl.Selection.Copy
xls_Blatt.Activate
xls_Blatt.Range("E" & Zeile).Select    ' Aktive Zelle auswählen
xls_Mappe.ActiveSheet.PasteSpecial (xlPasteValues)
' ***** Offene Menge
xls_Blatt1.Activate
xls_Blatt1.Range("OM").Select    ' Bereich auswählen
xls_Appl.Selection.Copy
xls_Blatt.Activate
xls_Blatt.Range("F" & Zeile).Select    ' Aktive Zelle auswählen
xls_Mappe.ActiveSheet.PasteSpecial (xlPasteValues)
' ***** Kosten Gesamt
xls_Blatt1.Activate
xls_Blatt1.Range("KG").Select    ' Bereich auswählen
xls_Appl.Selection.Copy
xls_Blatt.Activate
xls_Blatt.Range("M" & Zeile).Select    ' Aktive Zelle auswählen
xls_Mappe.ActiveSheet.PasteSpecial (xlPasteValues)
Zeile = Zeile + 1
xls_Mappe1.Close            ' Eingabe wieder schließen
Set xls_Blatt1 = Nothing        ' Resourcen freigeben
Set xls_Mappe1 = Nothing
End If
Next
xls_Mappe.Save        ' Tabelle speichern
xls_Appl.Quit                         ' Excel beenden
Set fi = Nothing                    ' Resourcen wieder freigeben
Set fo = Nothing
Set fso = Nothing
Set xls_Blatt = Nothing
Set xls_Mappe = Nothing
Set xls_Appl = Nothing
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zusammenführen von Dateien über Makro
26.08.2009 09:56:09
Dateien
Hi
Wäre auch super, wenn du uns eine Bsp-Datei mit Bsp-Daten und Code und Erklärungen in der Datei, was wann wie wo geschehen soll/geschieht, zur Verfügung stellst.
nur Code ohne Datei bedeutet nämlich, dass...
...nur "theoretisches" Testen möglich ist
...man sich deine Datei "basteln" müsste - was ja nicht geht, weil niemand weiß, welche Daten in welchen Zellen stehen - , wenn "theoretisches" Testen nicht möglich ist.
Danke
Ciao
Thorsten
AW: Zusammenführen von Dateien über Makro
26.08.2009 09:58:57
Dateien
Hallo Alex,
ich habe mit einem solchen Konstrukt 'xls_Blatt1.Range("KAM")' keine guten Erfahrungen gemacht,
besonders dann, wenn der definierte Name in einer anderen Arbeitsmappe sich befindet.
Deshalb mache ich es so:
dim rg As Range
Set rg = xls_Mappe1.Names("KAM").RefersToRange
rg.Copy
Dadurch erspart man sich das Selektieren des Range-Bereiches und in der Variablen rg sind auch die Namen von Tabelle und Arbeitsmappe enthalten.
MsgBox rg.Parent.Name 'Name der Tabelle
MsgBox rg.Parent.Parent.Name 'Name der Arbeitsmappe
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Zusammenführen von Dateien über Makro
26.08.2009 16:37:42
Dateien
Hallo Alex,
Problem-Nummer 1:
du startest die zusammenzuführenden Dateien in einem separaten Excel-Objekt. Das macht Kummer bei den Aktivate und Select Anweisungen in deinem Code, die natürlich wie fast immer zu 100% vermieden werden können.
Problem-Nummer 2:
Beim fi-Objekt der Dateiliste "stirbt" manchmal die Objekt-Eigenschaft ?
Problem Nummer 3:
Anweisungen wie:
xls_Mappe.ActiveSheet.PasteSpecial (xlPasteValues)
sind extrem problematisch in der Ausführung. Üblicher Weise arbeitet man nur mit ActiveWorkbook und ActiveSheet. Evtl. funktioniert es ja und macht Sinn mit mehreren Excel-Instanzen, aber der Datenaustausch zwischen 2 Excel-Instanzen ist dann doch nicht so einfach.
Problem Nummer 4:
An verschiedenen Stellen deines Codes wird der Fehler Nr. 9 generiert, was zwar nicht zum Abbruch führte, aber doch auf Problemchen hindeutet.
Hier mal dein Code (Überarbeitet unter Excel 2007) aufgeräumt und nach meiner Erfahrung auch kaum Fehleranfällig.
Gruß
Franz
Sub ExcelZusammenFuehren()
Const OrdnerPfad = "C:\Ordner\"
'Dim OrdnerPfad
'OrdnerPfad = ThisWorkbook.Path & "\Ordner\"
Dim xls_Mappe  As Workbook                ' Excel Arbeitsmappe
Dim xls_Blatt  As Worksheet               ' Excel Tabelle
Dim xls_Mappe1 As Workbook                ' Excel Arbeitsmappe
Dim xls_Blatt1  As Worksheet              ' Excel Tabelle
Dim fso                                 ' FileSystemObject
Dim fo                                   ' Ordner (Folder)
Dim fi                                    ' Datei (File)
Dim strFile As String
Dim Zeile
On Error GoTo Fehler
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(OrdnerPfad)
Set xls_Mappe = ThisWorkbook ' Tabellenblatt auswählen
Set xls_Blatt = xls_Mappe.Worksheets("Auswertung Tranchenübersicht")
Zeile = 9
For Each fi In fo.Files            ' Alle Dateien im Ordner durchlaufen
Application.ScreenUpdating = False
strFile = fi
If Right(UCase(strFile), 3) = "XLS" Then      ' Erkennen der Excel-Dateien
Set xls_Mappe1 = Application.Workbooks.Open(Filename:=strFile)
Set xls_Blatt1 = xls_Mappe1.Worksheets(1)
' ***** KAM
xls_Blatt1.Range("KAM").Copy
xls_Blatt.Range("B" & Zeile).PasteSpecial (xlPasteValues)
' ***** Kunde
xls_Blatt1.Range("Kunde").Copy
xls_Blatt.Range("C" & Zeile).PasteSpecial (xlPasteValues)
' ***** Jahr
xls_Blatt.Range("D" & Zeile).Value = xls_Blatt1.Name
' ***** Bestellte Menge
xls_Blatt1.Range("BM").Copy
xls_Blatt.Range("E" & Zeile).PasteSpecial (xlPasteValues)
' ***** Offene Menge
xls_Blatt1.Range("OM").Copy
xls_Blatt.Range("F" & Zeile).PasteSpecial (xlPasteValues)
' ***** Kosten Gesamt
xls_Blatt1.Range("KG").Copy
xls_Blatt.Range("G" & Zeile).PasteSpecial (xlPasteValues)
Zeile = Zeile + 1
xls_Mappe1.Close            ' Eingabe wieder schließen
Set xls_Blatt1 = Nothing        ' Resourcen freigeben
Set xls_Mappe1 = Nothing
Err.Clear 'generierte Fehler zurücksetzen
End If
Application.ScreenUpdating = True
Next
xls_Mappe.Save        ' Tabelle speichern
Set fi = Nothing                    ' Resourcen wieder freigeben
Set fo = Nothing
Set fso = Nothing
Set xls_Blatt = Nothing
Set xls_Mappe = Nothing
Fehler:
With Err
If .Number  0 Then
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End If
End With
End Sub

Anzeige
AW: Zusammenführen von Dateien über Makro
27.08.2009 09:19:16
Dateien
Danke Franz!
Klappt ja einwandfrei!
AW: Zusammenführen von Dateien über Makro
27.08.2009 09:21:46
Dateien
Danke Franz!
Klappt ja einwandfrei!

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige