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

Listen Zusammenführen

Listen Zusammenführen
04.05.2020 17:11:02
Ulli
Hallo Zusammen,
ich habe folgende Aufgabe:
In einem Ordner sind mehrere Exceldateien mit Maßnahmenlisten.
Diese Maßnahmenlisten möchte ich in einer Maßnahmenliste zusammenführen. Dort sollte dann auch noch der Dateiname mit notiert werden, aus der die entsprechende Maßnahme kommt.
Als Anlage hänge ich eine Datei an.
Das erste Arbeitsblatt "Maßnahmenliste_Komplett" stellt die neue Datei da.
Das Arbeitsblatt GB_01.xlsm und GB_02.xlsm .... sind eigentlich eigene Dateien, es können noch viele mehr sein, alle in einem Ordner.
Aus diesen Dateien (dort immer Arbeitsblatt 4 Name: "Übertrag to do") sollen halt die Maßnahmen ausgelesen werden und in der neuen Datei zusammengefügt werden.
Ich habe hier schon ein Makro eingebunden aus dem Forum, welches aus folgendem Beitrag stammt:
(https:\/\/www.herber.de/forum/archiv/1128to1132/1129032_Bestimmte_Zeilen_aus_mehreren_Dateien_auslesen.html)
Vielleicht kann man dieses entsprechend anpassen.
Vielen Danke für eure Hilfe.
Gruß Ulli
https:\/\/www.herber.de/bbs/user/137255.xlsm

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

Betreff
Datum
Anwender
Anzeige
AW: Listen Zusammenführen
04.05.2020 22:46:43
fcs
Hallo Ulli,
nachfolgend das angepasste Import-makr.
LG
Franz
Sub DatenImportieren()
' DatenImportieren Makro
Dim sVerzeichnis$, sDatei$
Dim wbZiel As Workbook, wbQuelle As Workbook
Dim wksZiel As Worksheet, wksQuelle As Worksheet
Dim ZeileZ&, FileCount&
Dim Spalte&
Dim ZeileQ&
Const StartZeile& = 6 '1. Auszulesende Zeile in Tabelle 1
Const Schritt& = 1 'Spaltenabstand der auszulesenden Zellen
On Error GoTo Fehler
'neue Datei mit einem Tabellenblatt für Ergebnisdaten erstellen
Set wbZiel = ThisWorkbook
'Zieltabellenblatt Objektvariable zuweisen
Set wksZiel = wbZiel.Worksheets("Maßnahmenliste_Komplett")
With wksZiel
ZeileZ = .Cells(.Rows.Count, 2).End(xlUp).Row 'letzte Zeile mit Daten
End With
'Suchverzeichnis auswahlen
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Ordner mit zu durchsuchenden Dateien wählen"
.ButtonName = "Auswälen"
If .Show = -1 Then
sVerzeichnis = .SelectedItems(1)
sDatei = Dir(sVerzeichnis & Application.PathSeparator & "*.xl*")
Else
GoTo Fehler
End If
End With
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Do Until sDatei = ""
FileCount = FileCount + 1
Application.StatusBar = "Datei, laufende Nr. " & FileCount & " wird bearbeitet."
'Quelldatei schreibgeschützt öffnen
Set wbQuelle = Workbooks.Open( _
Filename:=sVerzeichnis & Application.PathSeparator & sDatei, _
ReadOnly:=True)
'Tabelle1 Objektvariable zuweisen
Set wksQuelle = wbQuelle.Worksheets(4) 'Blatt"Übertrag to do"
'Werte aus Blatt 1 auslesen
ZeileQ = StartZeile
Do While wksQuelle.Cells(ZeileQ, 2)  ""
ZeileZ = ZeileZ + 1
With wksZiel
'Dateiname in Spalte B eintragen
.Cells(ZeileZ, 2).Value = wbQuelle.Name
'Werte aus den Spalten übertrageb
For Spalte = 3 To 6
.Cells(ZeileZ, Spalte) = wksQuelle.Cells(ZeileQ, Spalte - 1).Value
Next
End With
'Nächste Zeile setzen
ZeileQ = ZeileQ + Schritt
Loop
wbQuelle.Close savechanges:=False
Set wksQuelle = Nothing
Set wbQuelle = Nothing
sDatei = Dir
Loop
Application.ScreenUpdating = True
MsgBox "Alle Dateien ausgelesen"
Err.Clear
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case Else
Application.ScreenUpdating = True
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
End Select
End With
Set wbZiel = Nothing
Set wbQuelle = Nothing
With Application
.EnableEvents = True
.StatusBar = False
End With
End Sub

Anzeige
AW: Listen Zusammenführen - Ergänzung
05.05.2020 07:41:44
fcs
Hallo Ulli,
wenn der Dateiname ohne Namenserweiterung eingetragen werden soll, dann die folgende Zeile anpassen:
              'Dateiname in Spalte B eintragen
.Cells(ZeileZ, 2).Value = Left(wbQuelle.Name, InStrRev(wbQuelle.Name, ".") - 1)
LG
Franz
AW: Listen Zusammenführen - Ergänzung
05.05.2020 08:07:45
Ulli
Hallo Franz,
erst mal vielen Dank für deine Hilfe.
Ich habe es gerade getestet.
Es kommen zuerst immer Fehlermeldungen "Diese Arbeitsmappe enthält Verknüpfungen zu mindestens einer externen Quelle, die möglicherweise nicht sicher ist" Aktualisieren oder nicht aktualisieren"
Dieses kommt zwei mal, dann eine weitere Fehlermeldung " Maßnahmenliste.xlm ist bereits geöffnet. Wenn sie es erneut versuchen, verlieren Sie damit alle Änderungen.... ja oder nein..
Wenn ich da auch auf nein klicke , übernimmt er die Daten.
Der Hinweis auf Verknüpfungen könnte eventuell aus einer bedingten Formatierung der auszulesenden Tabellen stammen, es wäre natürlich gut wenn diese Fehlermeldung nicht kommen würde.
Zwei weiter Dinge wären noch schön.
Beim Starten des Makros öffnet sich der Explorer um einen Ordner auszuwählen, das ist OK, wäre es da möglich das er immer den Ordner vorschlägt wo die Datei aktuell abgespeichert ist?
Man könnte es ja dann gegebenenfalls ändern wenn es erforderlich ist.
Und wäre es möglich das auch Unterordner des ausgewählten Ordner mit durchsucht werden, dann könnte man die Dateien etwas sortieren.
Ach so noch eine Sache.
Wenn ich das Makro ein weiteres mal starte schreibt es die Daten ein weiters mal in die Tabelle, es wäre gut wenn die Tabelle erst gelöscht würde und dann alles neu übernommen würde.
Ansonsten sieht es schon gut aus.
Viele Grüße Ulli
Anzeige
AW: Listen Zusammenführen - Ergänzung
05.05.2020 08:36:07
Ulli
Hallo Franz,
bezüglich der Verknüpfungen brauchst du dir keine Gedanken machen,
wenn ich die Original Datei nehme, wo die Verknüpfung zugeordnet ist kommt die Fehlermeldung nicht mehr.
Ich habe gerade noch mal getestet.
Aber noch eine andere Sache.
Wenn eine Datei "Vorlage_GB_2.xlsm" heiß werden die Daten nicht übernommen; wenn ich die Namensergänzung "Vorlage_" rausnehme, dann werden die Daten übernommen.
Und eine Fehlermeldung erscheint nach der Übernahme:
Fehler-Nr.: 1004 Die Methode 'Open für das Workbooks' ist fehlgeschlagen.
Hängt vielleicht damit zusammen das er die Maßnahmenliste ein zweites mal öffnen will.
Viele Grüße Ulli
Anzeige
AW: Listen Zusammenführen -aus vielen Dateien
05.05.2020 15:01:12
fcs
Hallo Ulli,
ich hab das Makro in alle Richtungen angepasst,
  • Startverzeichnis bei der Ordnerauswahl ist der Speicherort der Datei

  • Bei der Suche nach Dateien werden alle Unterverzeichnisse des gewählten Ordners durchsucht

  • Die geöffnete Zieldatei wird beim Import aus den Dateien übersprungen

  • Fehler 1004: Dieser Fehler wurde von der temporären Datei verursacht, die Exel beim Öffnen von Dateien anlegt. Deren Name beginnt immer mit "~" - ich hab eine entsprechende Prüfung eingebaut.

  • LG
    Franz
    Option Explicit
    'Quelle: http://www. _
    herber.de/forum/archiv/1064to1068/t1064122.htm#1064890
    'Modifiziert: Franz Sielck 2010-08-07
    Public lCount As Long, arrFiles() As String
    Sub ListFilesInFolder(ByVal SourceFolderName As String, _
    Optional DateiFormat As String = "*.*", _
    Optional IncludeSubfolders As Boolean = False, _
    Optional FolderName As Boolean = False)
    '1.Parameter Ordner, wo soll gesucht werden?
    '2.Parameter Datei,* als Platzhalter verwenden,Optional leer ist alle
    '3.Parameter mit Unterordner = True, Optional False ist ohne
    '4.Parameter kompl. Pfad ausgeben = True, Optional nur Dateiname = False
    'Erstellt gemäß Suchkriterien ein Array mit den Dateinamen - optional inkl. Pfad
    Dim FSO As Object, SourceFolder As Object, SubFolder As Object
    Dim FileItem
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = FSO.GetFolder(SourceFolderName)
    On Error GoTo Err_Zugriff: 'sollte Ordner geschützt sein
    For Each FileItem In SourceFolder.Files
    If LCase(FileItem.Name) Like LCase(DateiFormat) Then
    lCount = lCount + 1
    ReDim Preserve arrFiles(1 To lCount)
    arrFiles(lCount) = IIf(FolderName, FileItem, FileItem.Name)
    End If
    Next FileItem
    If IncludeSubfolders Then
    For Each SubFolder In SourceFolder.SubFolders
    ListFilesInFolder SubFolder.Path, DateiFormat, IncludeSubfolders, FolderName
    Next SubFolder
    End If
    Err_Zugriff:
    Set FileItem = Nothing: Set SourceFolder = Nothing: Set FSO = Nothing
    End Sub
    Sub DatenImportieren()
    ' DatenImportieren Makro
    Dim sVerzeichnis$, sDatei$
    Dim wbZiel As Workbook, wbQuelle As Workbook
    Dim wksZiel As Worksheet, wksQuelle As Worksheet
    Dim ZeileZ&, FileCount&
    Dim Spalte&
    Dim ZeileQ&
    Const StartZeile& = 6 '1. Auszulesende Zeile in Tabelle 1
    Const Schritt& = 1 'Spaltenabstand der auszulesenden Zellen
    On Error GoTo Fehler
    'neue Datei mit einem Tabellenblatt für Ergebnisdaten erstellen
    Set wbZiel = ThisWorkbook
    'Zieltabellenblatt Objektvariable zuweisen
    Set wksZiel = wbZiel.Worksheets("Maßnahmenliste_Komplett")
    With wksZiel
    ZeileZ = .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile mit Daten
    If ZeileZ >= StartZeile Then
    .Range(.Cells(StartZeile, 1), .Cells(ZeileZ, 7)).ClearContents
    End If
    ZeileZ = StartZeile - 1
    End With
    'Suchverzeichnis auswahlen
    With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Bitte Ordner mit zu durchsuchenden Dateien wählen"
    .ButtonName = "Auswählen"
    .InitialFileName = wbZiel.Path & Application.PathSeparator
    If .Show = -1 Then
    sVerzeichnis = .SelectedItems(1)
    'Variablen zur Dateisuche zurücksetzen
    lCount = 0
    Erase arrFiles
    'Dateisuche starten
    Call ListFilesInFolder(SourceFolderName:=sVerzeichnis, _
    DateiFormat:="**.xls**", _
    IncludeSubfolders:=True, _
    FolderName:=True)
    If lCount = 0 Then
    MsgBox "Keine Ecxeldateien im Verzeichnis" & vbLf & sVerzeichnis _
    & vbLf & " gefunden.", vbOKOnly, "Imort von Maßnahmen"
    GoTo Fehler
    End If
    Else
    GoTo Fehler
    End If
    End With
    With Application
    .ScreenUpdating = False
    .EnableEvents = False
    End With
    For lCount = 1 To UBound(arrFiles)
    sDatei = Mid(arrFiles(lCount), InStrRev(arrFiles(lCount), "\") + 1)
    If Not (LCase(sDatei) = LCase(wbZiel.Name) Or Left(sDatei, 1) = "~") Then
    FileCount = FileCount + 1
    Application.StatusBar = "Datei, laufende Nr. " & FileCount & " wird bearbeitet."
    'Quelldatei schreibgeschützt öffnen
    Set wbQuelle = Workbooks.Open(Filename:=arrFiles(lCount), _
    ReadOnly:=True, UpdateLinks:=False)
    'Tabelle1 Objektvariable zuweisen
    Set wksQuelle = wbQuelle.Worksheets(4) 'Blatt"Übertrag to do"
    'Werte aus Blatt 1 auslesen
    ZeileQ = StartZeile
    Do While wksQuelle.Cells(ZeileQ, 2)  ""
    ZeileZ = ZeileZ + 1
    With wksZiel
    'lfd. Nr. in Spalte A eintragen
    .Cells(ZeileZ, 1).Value = ZeileZ - StartZeile + 1
    'Dateiname in Spalte B eintragen
    .Cells(ZeileZ, 2).Value = Left(wbQuelle.Name, InStrRev(wbQuelle.Name, ".") - 1)
    'Werte aus den Spalten übertragen
    For Spalte = 3 To 6
    .Cells(ZeileZ, Spalte) = wksQuelle.Cells(ZeileQ, Spalte - 1).Value
    Next
    End With
    'Nächste Zeile setzen
    ZeileQ = ZeileQ + Schritt
    Loop
    wbQuelle.Close savechanges:=False
    Set wksQuelle = Nothing
    Set wbQuelle = Nothing
    End If
    Next lCount
    'Werte zurücksetzen
    Erase arrFiles
    lCount = 0
    Application.ScreenUpdating = True
    MsgBox "Alle Dateien ausgelesen"
    Err.Clear
    Fehler:
    With Err
    Select Case .Number
    Case 0 'alles OK
    Case Else
    Application.ScreenUpdating = True
    MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
    If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
    End Select
    End With
    Set wbZiel = Nothing
    Set wbQuelle = Nothing
    With Application
    .EnableEvents = True
    .StatusBar = False
    End With
    End Sub
    

    Anzeige
    AW: Listen Zusammenführen -aus vielen Dateien
    05.05.2020 15:17:44
    Ulli
    Hallo Franz,
    Spitze, ich bin begeistert !!
    Klappt hervorragend.
    Viele lieben DANK !
    Gruß Ulli

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige