Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Viele Excel Dateien zu einer zusammenführen

Viele Excel Dateien zu einer zusammenführen
13.01.2006 13:49:25
daniele
Hallo allerseits!
Erstmals tolles Forum hier! Wirklich sehr viel nützliche Tipps!
Ich bin jetzt allerdings schon lange auf der Suche nach einer Problemstellung!
Vilt kann mir jemand von euch helfen:
Ich habe ein verzeichnis mit Excel-Dateien. Ich würde nun gerne aus allen Dateien in diesem Verzeichnis eine einzige Arbeitsmappe machen, in der dann die einzelnen Dateien in den Arbeitsblättern erscheinen. Der Titel der Arbeitsblätter soll den gleichen haben wie die ursprüngliche Datei...
Ich bin mit VBA leider noch nicht sehr bewandert, will es aber lernen! Im moment habe ich nur leider keine Zeit dafür....
könnte mir von euch vilt jemand den code für ein makro geben oder so?
Kann mir jemand helfen? Wäre wirklich sehr nett!!
Viele Grüße
Daniele
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
13.01.2006 16:05:52
Josef
Hallo Daniele!
Wieviele Blätter sind in den Dateien, bzw. welches Blatt soll in die Sammelmappe kommen?
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
13.01.2006 16:53:15
HansH
Hallo Daniele,
bist Du sicher, dass das Sinn macht? Die Datei könnte zu groß werden. Wie wärs mit ner Alternative die jeweiligen Dateien aus einer Datei aufzurufen?
https://www.herber.de/bbs/user/30006.xls
Gruß
Hans
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 10:29:45
Daniele
Hallo!
Sorry, bin erst heute wieder dazugekommen reinzuschauen.
Ja, da bin ich eigentlich relativ sicher. Hintergrund:
Ich habe ca 30 Dateien mit je einem sheet. Eine Tabelle, immer exakt das selbe Format, wenn ich jetzt alle Dateien in einer Mappe öffnen könnte markiere ich unten alle Blätter und kann so das Layout auf einmal ändern....
Verstanden?
Ich würde mich über weitere Antworten freuen...!
Grüße
Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 12:28:04
Josef
Hallo Daniele!
Viel Spass!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Sub SearchFileAndCopySheet()
Dim objFS As FileSearch
Dim objFO As Object
Dim objWb As Workbook, objNew As Workbook
Dim strPath As String
Dim intIndex As Integer

On Error GoTo ErrExit

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
  .Cursor = xlWait
End With

strPath = "F:\Temp" 'Pfad - Anpassen!

If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

Set objFS = Application.FileSearch
Set objFO = CreateObject("Scripting.FileSystemObject")
Set objNew = Workbooks.Add(xlWBATWorksheet)

With objFS
  .NewSearch
  .LookIn = strPath
  .FileType = msoFileTypeExcelWorkbooks
  .SearchSubFolders = False
  
  If .Execute > 0 Then
    
    For intIndex = 1 To .FoundFiles.Count
      
      Set objWb = Workbooks.Open(.FoundFiles(intIndex))
      
      objWb.Sheets(1).Copy after:=objNew.Sheets(objNew.Sheets.Count)
      
      objNew.Sheets(objNew.Sheets.Count).Name = objFO.GetBasename(.FoundFiles(intIndex))
      
      objWb.Close False
      
      Set objWb = Nothing
      
    Next
    
  End If
  
End With

objNew.Sheets(1).Delete
objNew.SaveAs strPath & "Zusammenfassung.xls"

ErrExit:
With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
  .Cursor = xlDefault
End With

Set objNew = Nothing
Set objFS = Nothing
Set objFO = Nothing

End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 15:01:43
Daniele
Hallo!
Erstmals 100 DANK! Wirklich wahnsinn, das es sowas noch gibt, setzt du dich hin und schreibst mir so ein MAKRO! Super!
Nun, funktionieren tuts bei mir leider nicht...
Wie bin ich vorgegangen:
Code kopiert,
in VB Editor,
MODUL einfügen,
abspeichern,
Editor schließen,
Makro öffnen.
Was passiert?
Es öffnet sich eine weiter mappe, in dieser ist EIN Tabellenblatt enthalten mit dem Titel:
"Tabelle1"
mehr passiert leider nicht....
Gruß
**Ich benutze EXCEL 2002
Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 15:09:27
Josef
Hallo Daniele!
Hast du den Pfad im Makro auch angepasst?
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 16:45:22
Daniele
JA!!!!!!!!!!!!!!
ES GEHT!!!!!!!!!!!!!!!!!!!!!!!!!
Eine kleine bitte noch:
Wäre es möglich das er anfangs nach dem Pfad fragt? Statt das mans im Code ändern muss?
Wäre super!!!
DANKE! und den besten Feierabend
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 16:58:56
Josef
Hallo Daniele!
Sicher geht das!
Pack alles in ein Modul!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

'BrowseForFolder mit Extra-Funktionen
'VB -Versionen: VB5 , VB6
'Betriebssystem: Win9x , WinNT, Win2000, WinME, WinXP
'Autor: Marco Wünschmann Homepage: ohne
'Datum: 23.08.2004

Option Explicit

' == Dialog-Einstellungen ================================

' String, der vor dem aktuell ausgewählen Verzeichnis angezeigt wird,
' falls der ShowCurrentPath-Paramter True ist.
Private Const DIALOG_CURRENT_SELECTION_TEXT As String = "Auswahl: "


' == API-Deklarationen ===================================

Private Type BROWSEINFO
  hOwner As Long
  pidlRoot As Long
  pszDisplayName As String
  lpszTitle As String
  ulFlags As Long
  lpfnCallback As Long
  lParam As Long
  iImage As Long
End Type

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Type Size
  cx As Long
  cy As Long
End Type

Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
  Alias "SHBrowseForFolderA" ( _
  lpBrowseInfo As BROWSEINFO) As Long

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  Alias "SHGetPathFromIDListA" ( _
  ByVal lPIDL As Long, _
  ByVal pszPath As String) As Long

Private Declare Sub CoTaskMemFree Lib "ole32.dll" ( _
  ByVal pv As Long)

Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hwnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long

Private Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  pDest As Any, _
  pSource As Any, _
  ByVal dwLength As Long)

Private Declare Function ILCreateFromPath Lib "shell32" _
  Alias "#157" ( _
  ByVal sPath As String) As Long

Private Declare Function LocalAlloc Lib "kernel32" ( _
  ByVal uFlags As Long, _
  ByVal uBytes As Long) As Long

Private Declare Function LocalFree Lib "kernel32" ( _
  ByVal hmem As Long) As Long

Private Declare Function lstrcpyA Lib "kernel32" ( _
  lpString1 As Any, _
  lpString2 As Any) As Long

Private Declare Function lstrlenA Lib "kernel32" ( _
  lpString As Any) As Long

Private Declare Function FindWindowEx Lib "user32.dll" _
  Alias "FindWindowExA" ( _
  ByVal hWnd1 As Long, _
  ByVal hWnd2 As Long, _
  ByVal lpsz1 As String, _
  ByVal lpsz2 As String) As Long

Private Declare Function GetWindowDC Lib "user32.dll" ( _
  ByVal hwnd As Long) As Long

Private Declare Function GetWindowRect Lib "user32.dll" ( _
  ByVal hwnd As Long, _
  ByRef lpRect As RECT) As Long

Private Declare Function GetTextExtentPoint Lib "gdi32.dll" _
  Alias "GetTextExtentPointA" ( _
  ByVal hDC As Long, _
  ByVal lpszString As String, _
  ByVal cbString As Long, _
  ByRef lpSize As Size) As Long

Private Declare Function PathCompactPath Lib "shlwapi.dll" _
  Alias "PathCompactPathA" ( _
  ByVal hDC As Long, _
  ByVal pszPath As String, _
  ByVal dx As Long) As Long

Private Const MAX_PATH = 260

Private Const WM_USER = &H400

Private Const BFFM_INITIALIZED = 1
Private Const BFFM_SELCHANGED As Long = 2
Private Const BFFM_SETSTATUSTEXTA As Long = (WM_USER + 100)
Private Const BFFM_SETSTATUSTEXTW As Long = (WM_USER + 104)
Private Const BFFM_ENABLEOK As Long = (WM_USER + 101)
Private Const BFFM_SETSELECTIONA As Long = (WM_USER + 102)
Private Const BFFM_SETSELECTIONW As Long = (WM_USER + 103)

Private Const BIF_NEWDIALOGSTYLE As Long = &H40
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
Private Const BIF_STATUSTEXT As Long = &H4

Private Const LMEM_FIXED = &H0
Private Const LMEM_ZEROINIT = &H40
Private Const LPTR = (LMEM_FIXED Or LMEM_ZEROINIT)

' Zeigt den BrowseForFolder-Dialog an.
Public Function BrowseForFolder(DialogText As String, _
  DefaultPath As String, _
  OwnerhWnd As Long, _
  Optional ShowCurrentPath As Boolean = True, _
  Optional RootPath As Variant, _
  Optional NewDialogStyle As Boolean = False, _
  Optional IncludeFiles As Boolean = False) As String


' Parameter:
' o DialogText Dialogtext, der oben im Dialog angezeigt wird.
' o DefaultPath Standardmäßig ausgewähltes Verzeichnis.
' o OwnerhWnd hWnd des übergeordneten Fensters (in den meisten
' Fällen Me.hWnd).
' o ShowCurrentPath Legt fest, ob die aktuelle Verzeichnisauswahl
' angezeigt werden soll. Verfügbar ab
' Internet Explorer 4.0 (-> PathCompactPath).
' o RootPath Root-Verzeichnis. Wird es angegeben, werden nur die
' Ordner unterhalb dieses Verzeichnisses angezeigt.
' o NewDialogStyle Legt fest, ob der Dialog in der neuen Darstellung
' angezeigt werden soll (Dialog kann vergrößert/
' verkleinert werden, es ist eine Schaltfläche zum
' Anlegen eines neuen Ordners vorhanden, es können
' Dateioperationen wie löschen etc. ausgeführt
' werden, ...). Ist dieser Parameter True, hat der
' Parameter ShowCurrentPath keine Wirkung. Verfügbar
' unter WinME und Betriebsystemen ab Win2000.
' o IncludeFiles Legt fest, ob auch Dateien im Dialog angezeigt und
' ausgewählt werden können.
' Verfügbar ab Win98 und Internet Explorer 4.0 (bei
' frühreren Windowsversionen muss IE4 inkl. der
' Integrated Shell installiert sein).

Dim biBrowseInfo As BROWSEINFO
Dim lPIDL As Long
Dim sBuffer As String
Dim lBufferPointer As Long

With biBrowseInfo
  ' Handle des übergeordneten Fensters
  .hOwner = OwnerhWnd
  
  ' PIDL des Rootordners zuweisen
  If Not IsMissing(RootPath) Then .pidlRoot = PathToPIDL(RootPath)
  
  ' Dialogtext zuweisen
  If ShowCurrentPath And DialogText = "$" Then DialogText = "" ' Wird intern nicht zugelassen
  .lpszTitle = DialogText
  
  ' Stringbuffer für aktuell selektierten Pfad zuweisen
  If ShowCurrentPath Then .pszDisplayName = sBuffer
  
  ' Dialogeinstellungen zuweisen
  .ulFlags = BIF_RETURNONLYFSDIRS + _
    IIf(ShowCurrentPath, BIF_STATUSTEXT, 0) + _
    IIf(NewDialogStyle, BIF_NEWDIALOGSTYLE, 0) + _
    IIf(IncludeFiles, BIF_BROWSEINCLUDEFILES, 0)
  
  ' Callbackfunktion-Adresse zuweisen
  .lpfnCallback = FARPROC(AddressOf CallbackString)
  
  ' PIDL des vorselektierten Ordnerpfades zuweisen (wird im
  ' lpData-Parameter an die Callback-Funktion weitergeleitet)
  .lParam = PathToPIDL(DefaultPath)
End With

' BrowseForFolder-Dialog anzeigen
lPIDL = SHBrowseForFolder(biBrowseInfo)

If lPIDL Then
  ' Stringspeicher reservieren
  sBuffer = Space$(MAX_PATH)
  
  ' Selektierten Pfad aus der zurückgegebenen PIDL ermitteln
  SHGetPathFromIDList lPIDL, sBuffer
  
  ' Nullterminierungszeichen des Strings entfernen
  sBuffer = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
  
  ' Selektierten Pfad zurückgeben
  BrowseForFolder = sBuffer
  
  ' Reservierten Task-Speicher wieder freigeben
  Call CoTaskMemFree(lPIDL)
End If

' Stringspeicher wieder freigeben
If ShowCurrentPath Then Call LocalFree(lBufferPointer)
End Function


Private Function CallbackString(ByVal hwnd As Long, ByVal uMsg As Long, _
  ByVal lParam As Long, ByVal lpData As Long) As Long


' Callback-Funktion des BrowseForFolder-Dialogs. Wird bei
' eintretenden Ereignissen des Dialogs aufgerufen.

Dim sBuffer As String
Dim lStaticWnd As Long
Dim lStaticDC As Long
Dim sPath As String
Dim rctStatic As RECT
Dim szTextSize As Size

' Meldungen herausfiltern
Select Case uMsg
  Case BFFM_INITIALIZED
    ' Dialog wurde initialisiert
    
    ' Standardmäßig markierten Pfad (dessen PIDL wurde in lpData
    ' übergeben) im Dialog selektieren
    Call SendMessage(hwnd, BFFM_SETSELECTIONA, False, ByVal lpData)
  Case BFFM_SELCHANGED
    ' Selektion hat sich geändert
    
    ' Stringspeicher reservieren
    sBuffer = Space$(MAX_PATH)
    
    ' Aktuell selektierten Pfad ermitteln und anzeigen, wenn möglich
    If SHGetPathFromIDList(lParam, sBuffer) Then
      ' Temporäre Zeichenfolge an das Anzeigelabel senden, um
      ' dessen Handle anhand dieser Zeichenfolge ermitteln zu können
      SendMessage hwnd, BFFM_SETSTATUSTEXTA, 0&, ByVal "$"
      
      ' Handle und DeviceContext des Anzeigelabels ermitteln
      lStaticWnd = FindWindowEx(hwnd, ByVal 0&, ByVal "Static", ByVal "$")
      lStaticDC = GetWindowDC(lStaticWnd)
      
      ' Abmessungen des Anzeigelabels ermitteln
      GetWindowRect lStaticWnd, rctStatic
      
      ' Textabmessungen der Zeichenfolge "Auswahl: " im Anzeigelabel
      ' ermitteln
      GetTextExtentPoint lStaticDC, ByVal DIALOG_CURRENT_SELECTION_TEXT, _
        ByVal Len(DIALOG_CURRENT_SELECTION_TEXT), szTextSize
      
      ' Anzuzeigenden Pfad auf die Abmessungen des Anzeigelabels
      ' kürzen; falls dies nicht möglich ist, gesamten Pfad anzeigen
      sPath = sBuffer
      If PathCompactPath(ByVal lStaticDC, sPath, ByVal (rctStatic.Right - _
        rctStatic.Left - szTextSize.cx + 80)) = 0 Then sPath = sBuffer
      
      ' Nullterminierung entfernen
      sPath = Left$(sPath, InStr(1, sPath, vbNullChar) - 1)
      
      ' Pfad im Dialog anzeigen
      Call SendMessage(hwnd, BFFM_SETSTATUSTEXTA, 0&, _
        ByVal DIALOG_CURRENT_SELECTION_TEXT & sPath)
    Else
      ' Pfadanzeige leeren
      SendMessage hwnd, BFFM_SETSTATUSTEXTA, 0&, ByVal ""
    End If
End Select
End Function


Private Function FARPROC(FunctionPointer As Long) As Long
' Funktion wird benötigt, um Funktions-Adresse ermitteln
' zu können, dessen Adresse mit AddressOf übergeben und
' anschließend wieder zurückgegeben wird.

FARPROC = FunctionPointer
End Function


' Gibt die lPIDL zum übergebenen Pfad zurück.
Private Function PathToPIDL(ByVal sPath As String) As Long
Dim lRet As Long

lRet = ILCreateFromPath(sPath)
If lRet = 0 Then
  sPath = StrConv(sPath, VbStrConv.vbUnicode)
  lRet = ILCreateFromPath(sPath)
End If

PathToPIDL = lRet
End Function



Public Sub SearchFileAndCopySheet()
Dim objFS As FileSearch
Dim objFO As Object
Dim objWb As Workbook, objNew As Workbook
Dim strPath As String
Dim intIndex As Integer

On Error GoTo ErrExit

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
  .Cursor = xlWait
End With

strPath = BrowseForFolder("Quellverzeichnis auswählen", ThisWorkbook.Path, 0, , , False, False)

If strPath = "" Then GoTo ErrExit

If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

Set objFS = Application.FileSearch
Set objFO = CreateObject("Scripting.FileSystemObject")
Set objNew = Workbooks.Add(xlWBATWorksheet)

With objFS
  .NewSearch
  .LookIn = strPath
  .FileType = msoFileTypeExcelWorkbooks
  .SearchSubFolders = False
  
  If .Execute > 0 Then
    
    For intIndex = 1 To .FoundFiles.Count
      
      Set objWb = Workbooks.Open(.FoundFiles(intIndex))
      
      objWb.Sheets(1).Copy after:=objNew.Sheets(objNew.Sheets.Count)
      
      objNew.Sheets(objNew.Sheets.Count).Name = objFO.GetBasename(.FoundFiles(intIndex))
      
      objWb.Close False
      
      Set objWb = Nothing
      
    Next
    
  End If
  
End With

objNew.Sheets(1).Delete
objNew.SaveAs strPath & "Zusammenfassung.xls"

ErrExit:
With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
  .Cursor = xlDefault
End With

Set objNew = Nothing
Set objFS = Nothing
Set objFO = Nothing

End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 17:18:19
Daniele
Wirklich super!!!
Genau wie ich mir das vorgestellt habe!
Perfekt!
GEIL!
Hiermit werden mir bestimmt 2 Tage Arbeit erspart!
Ein kleiner Bug (der mich persönlich nicht stört, nur zur info)::
Das Fenster das sich öffnet, in welchem man das Verzeichnis angibt, wenn man dieses in die Mitte vom Bildschirm ziehen will, also allgemein das ganze Fenster bewegt, zieht es Schlieren.....So als wäre die Grafikkarte schrecklich langsam...
Keine Ahnung woran das liegt!
Nochmals 1000Dank!
Ciao!
Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 17:22:10
Josef
Hallo Daniele!
So ist's besser!
Public Sub SearchFileAndCopySheet()
Dim objFS As FileSearch
Dim objFO As Object
Dim objWb As Workbook, objNew As Workbook
Dim strPath As String
Dim intIndex As Integer


strPath = BrowseForFolder("Quellverzeichnis auswählen", ThisWorkbook.Path, 0, , , True, False)

If strPath = "" Then Exit Sub

On Error GoTo ErrExit

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
  .Cursor = xlWait
End With

If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

Set objFS = Application.FileSearch
Set objFO = CreateObject("Scripting.FileSystemObject")
Set objNew = Workbooks.Add(xlWBATWorksheet)

With objFS
  .NewSearch
  .LookIn = strPath
  .FileType = msoFileTypeExcelWorkbooks
  .SearchSubFolders = False
  
  If .Execute > 0 Then
    
    For intIndex = 1 To .FoundFiles.Count
      
      Set objWb = Workbooks.Open(.FoundFiles(intIndex))
      
      objWb.Sheets(1).Copy after:=objNew.Sheets(objNew.Sheets.Count)
      
      objNew.Sheets(objNew.Sheets.Count).Name = objFO.GetBasename(.FoundFiles(intIndex))
      
      objWb.Close False
      
      Set objWb = Nothing
      
    Next
    
  End If
  
End With

objNew.Sheets(1).Delete
objNew.SaveAs strPath & "Zusammenfassung.xls"

ErrExit:
With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
  .Cursor = xlDefault
End With

Set objNew = Nothing
Set objFS = Nothing
Set objFO = Nothing

End Sub


Den rest des Codes unverändert lassen!
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 17:22:31
Daniele
Eine Frage noch, ist es schwer ein Makro zu schreiben, welches das Ganze jetzt wieder rückgängig macht?
(Das muss ich ja nachdem ich die Dateien bearbeitet habe tun...würde jetzt hald mit copy and paste arbeiten)
Sprich es öffnet sich nach ausführen des Makros ein Fenster das fragt in welchem Ordner die einzelnen Tabellenblätter abgespeichert werden sollen...
Nach auswählen des Ordner speichert er jedes Tabellenblatt mit dessen Namen extra ab.
........!?!?
Schönen Abend wünsche ich noch.
PS: Wenn zu viel Aufwand, selbst verständlich kein Problem!
Anzeige
AW: Viele Excel Dateien zu einer zusammenführen
17.01.2006 17:48:09
Josef
Hallo Daniele!
Ist auch kein Peoblem;-)))
Gehört in das selbe Modul wie der andere Code und bezieht sich beim erstellen der Dateien auf die aktive Mappe!
Public Sub TakeSheetsAndSaveAsFile()
Dim objWb As Workbook
Dim objSh As Worksheet
Dim strPath As String

strPath = BrowseForFolder("Zielverzeichnis auswählen", ThisWorkbook.Path, 0, , , True, False)

If strPath = "" Then Exit Sub

On Error GoTo ErrExit

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
  .Cursor = xlWait
End With

If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

Set objWb = ActiveWorkbook

For Each objSh In objWb.Worksheets
  objSh.Copy
  ActiveWorkbook.SaveAs strPath & ActiveWorkbook.Sheets(1).Name & ".xls"
  ActiveWorkbook.Close True
Next

ErrExit:
With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
  .Cursor = xlDefault
End With

Set objWb = Nothing


End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel Dateien Zusammenführen: Schritt-für-Schritt-Anleitung und Tipps


Schritt-für-Schritt-Anleitung

Um mehrere Excel-Dateien zusammenzuführen, kannst du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Erstelle ein neues Modul:

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Füge den folgenden Code in das Modul ein:

    Public Sub SearchFileAndCopySheet()
       Dim objFS As FileSearch
       Dim objFO As Object
       Dim objWb As Workbook, objNew As Workbook
       Dim strPath As String
       Dim intIndex As Integer
    
       On Error GoTo ErrExit
       With Application
           .ScreenUpdating = False
           .EnableEvents = False
           .DisplayAlerts = False
           .Calculation = xlCalculationManual
           .Cursor = xlWait
       End With
    
       strPath = BrowseForFolder("Quellverzeichnis auswählen", ThisWorkbook.Path, 0, , , False, False)
    
       If strPath = "" Then GoTo ErrExit
       If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
       Set objFS = Application.FileSearch
       Set objFO = CreateObject("Scripting.FileSystemObject")
       Set objNew = Workbooks.Add(xlWBATWorksheet)
    
       With objFS
           .NewSearch
           .LookIn = strPath
           .FileType = msoFileTypeExcelWorkbooks
           .SearchSubFolders = False
    
           If .Execute > 0 Then
               For intIndex = 1 To .FoundFiles.Count
                   Set objWb = Workbooks.Open(.FoundFiles(intIndex))
                   objWb.Sheets(1).Copy after:=objNew.Sheets(objNew.Sheets.Count)
                   objNew.Sheets(objNew.Sheets.Count).Name = objFO.GetBasename(.FoundFiles(intIndex))
                   objWb.Close False
               Next
           End If
       End With
    
       objNew.Sheets(1).Delete
       objNew.SaveAs strPath & "Zusammenfassung.xls"
    
    ErrExit:
       With Application
           .ScreenUpdating = True
           .EnableEvents = True
           .DisplayAlerts = True
           .Calculation = xlCalculationAutomatic
           .Cursor = xlDefault
       End With
    End Sub
  4. Schließe den VBA-Editor und führe das Makro über EntwicklertoolsMakros aus.

  5. Wähle das Verzeichnis mit den Excel-Dateien aus.

Damit hast du mehrere Excel-Dateien automatisch zusammengeführt und in einer neuen Arbeitsmappe gespeichert.


Häufige Fehler und Lösungen

  • Fehler: "Tabelle1" bleibt ohne Inhalt
    Lösung: Überprüfe den Pfad im Code. Du musst sicherstellen, dass der Pfad korrekt ist und die Dateien die erwarteten Inhalte haben.

  • Fehler: Das Makro funktioniert nicht
    Lösung: Stelle sicher, dass du Makros in Excel aktiviert hast. Gehe zu DateiOptionenTrust CenterEinstellungen für das Trust Center und aktiviere die Makros.


Alternative Methoden

Es gibt mehrere Methoden, um Excel-Dateien zusammenzuführen:

  1. Power Query: Diese Funktion ermöglicht es dir, mehrere Excel-Dateien zusammenzuführen, ohne VBA verwenden zu müssen.

    • Gehe zu DatenAbrufen und transformierenDaten abrufen und wähle Aus DateiAus Ordner.
    • Wähle den Ordner aus und klicke auf Daten transformieren.
    • Du kannst dann die Daten aus verschiedenen Dateien in einer Abfrage zusammenführen.
  2. Datenkonsolidierung: Du kannst auch die Funktion Konsolidieren verwenden, um Daten aus verschiedenen Arbeitsblättern oder -mappen zu aggregieren.


Praktische Beispiele

  • Beispiel 1: Wenn du mehrere Verkaufsberichte hast, kannst du sie in eine einzige Datei zusammenführen, um die Gesamtverkäufe zu analysieren.
  • Beispiel 2: Bei der jährlichen Finanzberichterstattung kannst du alle Monatsberichte in einer Arbeitsmappe zusammenführen, um einen Gesamtüberblick zu erhalten.

Tipps für Profis

  • Verwende Namensbereiche in Excel, um Daten schneller zu referenzieren, wenn du mehrere Excel-Dateien zusammenführst.
  • Automatisiere den Prozess weiter, indem du das Makro so anpasst, dass es nach dem Speichern der Datei eine E-Mail mit der Datei versendet.
  • Halte deine Excel-Version aktuell, um die neuesten Funktionen nutzen zu können. Es gibt Unterschiede in der VBA-Implementierung zwischen Excel 2002 und neueren Versionen.

FAQ: Häufige Fragen

1. Kann ich mehrere Excel-Dateien ohne Makro zusammenführen?
Ja, du kannst Power Query verwenden, um Daten aus mehreren Dateien zu kombinieren, ohne VBA zu nutzen.

2. Wie speichere ich die zusammengeführte Datei in einem anderen Format?
Du kannst den SaveAs-Befehl im VBA-Code anpassen, um die Datei in einem gewünschten Format zu speichern, z.B. .xlsx anstelle von .xls.

3. Funktioniert dies auch mit Excel 2002?
Ja, der bereitgestellte Code sollte auch in Excel 2002 funktionieren, allerdings können einige Funktionen in neueren Versionen anders implementiert sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige