Mehrere Excel ToDo Listen per VBA bzw Makro zusammenführen?
Ich benötige Hilfe, um mehrere Excel ToDo Listen per VBA bzw Makro zusammenführen.
Hallo zusammen,
mein Problem ist folgendes:
Ich möchte einige ToDo Listen, die immer den gleichen Aufbau haben, in einer Excelliste bei Bedarf zusammenführen. Leider bin ich in VBA Programmierung nicht fit und hoffe daher auf eure Untestützung.
Ich stelle es mir so vor, dass ich eine leere To Do ExcelDatei nehme, dort ein Makro ausführe und dann die einzelnen Punkte aus den verschiedenen Dateien zusammengeführt werden.
Das Makro sollte in den ToDo Listen immer ab Zeile 3 auslesen, soweit dieses Arbeitsblatt gefüllt ist. Das Makro muss in den Dateien nicht mehrere Reiter durchsuchen.
Die ausgelesenen Daten sollen dann untereinander in die leere ToDo Liste geschrieben werden.
Ich glaube bis da ist es nicht so schwer. Nur sind die Dateien die ausgelesen werden in unterschiedlichen Ordnern... Es muss also eine Möglichkeit geben, dass ich im Makrotext sämtliche Dateien die ausgelesen werden sollen, eingeben kann. Ich denke es werden etwa 10 Dateien sein.
Was meint ihr? Ist da etwas möglich?
Würde mich rießig über Lösungsvorschläge freuen.
Viele Grüße,
Carlos
mein Problem ist folgendes:
Ich möchte einige ToDo Listen, die immer den gleichen Aufbau haben, in einer Excelliste bei Bedarf zusammenführen. Leider bin ich in VBA Programmierung nicht fit und hoffe daher auf eure Untestützung.
Ich stelle es mir so vor, dass ich eine leere To Do ExcelDatei nehme, dort ein Makro ausführe und dann die einzelnen Punkte aus den verschiedenen Dateien zusammengeführt werden.
Das Makro sollte in den ToDo Listen immer ab Zeile 3 auslesen, soweit dieses Arbeitsblatt gefüllt ist. Das Makro muss in den Dateien nicht mehrere Reiter durchsuchen.
Die ausgelesenen Daten sollen dann untereinander in die leere ToDo Liste geschrieben werden.
Ich glaube bis da ist es nicht so schwer. Nur sind die Dateien die ausgelesen werden in unterschiedlichen Ordnern... Es muss also eine Möglichkeit geben, dass ich im Makrotext sämtliche Dateien die ausgelesen werden sollen, eingeben kann. Ich denke es werden etwa 10 Dateien sein.
Was meint ihr? Ist da etwas möglich?
Würde mich rießig über Lösungsvorschläge freuen.
Viele Grüße,
Carlos
Please also mark the comments that contributed to the solution of the article
Content-Key: 124561
Url: https://administrator.de/contentid/124561
Printed on: April 25, 2024 at 22:04 o'clock
18 Comments
Latest comment
Hallo CarlosGamle!
Was sind ToDo-Listen? Sind das *.xls oder *.csv oder *.txt-Dateien und gegebenfalls mit Trennzeichen?
Gruß Dieter
Was sind ToDo-Listen? Sind das *.xls oder *.csv oder *.txt-Dateien und gegebenfalls mit Trennzeichen?
Gruß Dieter
Hallo CarlosGamle!
Yep, aber ein paar kleine Info's fehlen noch
Ist es in den einzelnen Arbeitsmappen immer das 1.Tabellenblatt (Zeile3 bis)? Spalten von bis?
Wie soll der Ablauf in der Arbeitsmappe mit dem Makro sein? Sollen die Daten:
Nach einem Import In eine neue Datei gesichert werden?
oder
Vor einem neuen Import gelöscht werden?
oder
Bei einem neuen Import angefügt werden?
Gruß Dieter
Yep, aber ein paar kleine Info's fehlen noch
Ist es in den einzelnen Arbeitsmappen immer das 1.Tabellenblatt (Zeile3 bis)? Spalten von bis?
Wie soll der Ablauf in der Arbeitsmappe mit dem Makro sein? Sollen die Daten:
Nach einem Import In eine neue Datei gesichert werden?
oder
Vor einem neuen Import gelöscht werden?
oder
Bei einem neuen Import angefügt werden?
Gruß Dieter
Hallo CarlosGamle!
OK, soweit ist alles klar.
Jetzt bleibt noch die Möglichkeit, dass Du das Makro z.B. per Tastenkombination startest oder das das Makro beim öffnen der Arbeitsmappe automatisch den Inhalt löscht und einen neuen Import startet. Wie hättest Du's gerne
Gruß Dieter
OK, soweit ist alles klar.
Jetzt bleibt noch die Möglichkeit, dass Du das Makro z.B. per Tastenkombination startest oder das das Makro beim öffnen der Arbeitsmappe automatisch den Inhalt löscht und einen neuen Import startet. Wie hättest Du's gerne
Gruß Dieter
Hallo CarlosGamle!
Hier mal ein Entwurf:
Der Ablauf:
Beim Starten wird ein File-Dialog mit dem Datei-Typ *.xls angezeigt. Der Code wird solange ausgeführt, wie eine oder mehrere Dateien mit Öffnen bestätigt wird. Mit Abbrechen, wird das Makro beendet.
Wenn's automatisch laufen soll, dann Zeile 1 ändern in:
und in diese Arbeitsmappe kopieren. Ansonsten in ein Modul.
In Zeile 3 den Namen der leeren Excel-Datei angeben z.B. "Import.xls"
In Zeile 4 den Pfad des Start-Ordners angeben z.B. "C:\Test\*"
Und falls Du noch sortieren möchtest, dann Sort-Anweisung in Zeile 24 einfügen.
Gruß Dieter
[edit] Letzte Änderung am 11.09. um 23:00 Uhr [/edit]
Hier mal ein Entwurf:
Option Explicit
Const ImportDatei = "Name der Leer-Datei"
Const StartOrdner = "Pfad des Start-Ordners"
Sub SheetsImport()
Dim Dlg As FileDialog, Wks As Worksheet, i As Integer
Set Wks = Workbooks(ImportDatei).Sheets(1): Wks.Cells.Clear
Set Dlg = Application.FileDialog(msoFileDialogOpen)
Dlg.InitialFileName = StartOrdner
Dlg.Filters.Add "Excel Dateien", "*.xls", 1
DlgNext:
If Dlg.Show = False Then Exit Sub
For i = 1 To Dlg.SelectedItems.Count
Call SheetsInsert(Wks, Dlg.SelectedItems(i))
Next
GoTo DlgNext
End Sub
Private Sub SheetsInsert(ByRef Wks, ByRef Path)
Dim xWkb As Workbook, xWks As Worksheet, NextLine As Integer
Application.ScreenUpdating = False
Set xWkb = Workbooks.Open(Path): Set xWks = xWkb.Sheets(1)
NextLine = Wks.Cells(Wks.Rows.Count, "A").End(xlUp).Row
If NextLine > 1 Then NextLine = NextLine + 1
xWks.Rows("3:" & xWks.Cells(xWks.Rows.Count, "A").End(xlUp).Row).Copy
Wks.Rows(NextLine).Insert Shift:=xlDown
Application.CutCopyMode = False: xWkb.Saved = True: xWkb.Close
Application.ScreenUpdating = True
End Sub
Der Ablauf:
Beim Starten wird ein File-Dialog mit dem Datei-Typ *.xls angezeigt. Der Code wird solange ausgeführt, wie eine oder mehrere Dateien mit Öffnen bestätigt wird. Mit Abbrechen, wird das Makro beendet.
Wenn's automatisch laufen soll, dann Zeile 1 ändern in:
Private Sub Workbook_Open()
In Zeile 3 den Namen der leeren Excel-Datei angeben z.B. "Import.xls"
In Zeile 4 den Pfad des Start-Ordners angeben z.B. "C:\Test\*"
Und falls Du noch sortieren möchtest, dann Sort-Anweisung in Zeile 24 einfügen.
Gruß Dieter
[edit] Letzte Änderung am 11.09. um 23:00 Uhr [/edit]
Hallo CarlosGamle!
Scheinbar hast Du den Rest nach dem Code nicht richtig gelesen
Beim Starten wird ein Datei Öffnen-Dialog angezeigt, indem Du den Ordner und die entsprechenden *.xls-Dateien auswählen kannst. Der Dialog wird nach jedem Kopiervorgang erneut geöffnet und erst beim betätigen des Button <Abbrechen>, wird das Makro beendet.
Im Code Zeile 9 (neu hinzugefügt) kann nach entfernen des Kommentarzeichens ' der Start Ordner-Pfad angegeben werden. Beispiel: C:\Test als "C\Test\*"
Gruß Dieter
Scheinbar hast Du den Rest nach dem Code nicht richtig gelesen
Beim Starten wird ein Datei Öffnen-Dialog angezeigt, indem Du den Ordner und die entsprechenden *.xls-Dateien auswählen kannst. Der Dialog wird nach jedem Kopiervorgang erneut geöffnet und erst beim betätigen des Button <Abbrechen>, wird das Makro beendet.
Im Code Zeile 9 (neu hinzugefügt) kann nach entfernen des Kommentarzeichens ' der Start Ordner-Pfad angegeben werden. Beispiel: C:\Test als "C\Test\*"
Gruß Dieter
Hallo CarlosGamle!
Wahrscheinlich war die leere Excel-Datei nicht das aktive Fenster. Indem Fall funktioniert das Makro nicht korrekt
Dieser Fehler kann nur ausgeschlossen werden, indem das Makro entweder automatisch über die Workbook-Open-Funktion ausgeführt wird oder explizit der Name des leeren Excel-Sheets festgelegt wird. Letzteres habe ich im geänderten Code jetzt mit eingebunden (Zeile 3).
In Zeile 3 den Namen der leeren Arbeitsmappe und in Zeile 4 den Pfad des Start-Ordners angeben:
Sollte jetzt unabhängig vom aktiven Fenster funktionieren.
Gruß Dieter
Wahrscheinlich war die leere Excel-Datei nicht das aktive Fenster. Indem Fall funktioniert das Makro nicht korrekt
Dieser Fehler kann nur ausgeschlossen werden, indem das Makro entweder automatisch über die Workbook-Open-Funktion ausgeführt wird oder explizit der Name des leeren Excel-Sheets festgelegt wird. Letzteres habe ich im geänderten Code jetzt mit eingebunden (Zeile 3).
In Zeile 3 den Namen der leeren Arbeitsmappe und in Zeile 4 den Pfad des Start-Ordners angeben:
Const ImportDatei = "Makro-Test.xls"
Const StartOrdner = "C:\Dokumente und Einstellungen\GeroldB\Eigene Dateien\Excel Test\*"
Sollte jetzt unabhängig vom aktiven Fenster funktionieren.
Gruß Dieter
Guten Morgen Carlos!
Zu 1. - Soll in den Zeilen 1-2 was drinstehen?
Zu 2. - Befinden sich die Import-Excel-Dateien alle im gleichen Ordner?
Falls ja, wäre es wesentlich einfacher, Du würdest im Datei-Öffnen-Dialog alle entsprechenden Dateien auf einmal markieren und gegebenenfalls nach dem Import sortieren oder per VBA-Code sortieren lassen.
Ansonsten kannst Du in der leeren Excel-Datei schon mal ein 2. Tabellenblatt einfügen und einen Tabellennamen für die Tabelle <Import-Daten> und die Tabelle <Datei-Liste> festlegen. Letzteres kann nach den entsprechenden Einträgen auch ausgeblendet werden.
Bei gleichem Ordner, könnte die Tabelle Datei-Liste so aussehen:
oder:
Die Tabellennamen und wo in Datei-Liste was drinsteht musst Du mir natürlich mitteilen
Gruß Dieter
Zu 1. - Soll in den Zeilen 1-2 was drinstehen?
Zu 2. - Befinden sich die Import-Excel-Dateien alle im gleichen Ordner?
Falls ja, wäre es wesentlich einfacher, Du würdest im Datei-Öffnen-Dialog alle entsprechenden Dateien auf einmal markieren und gegebenenfalls nach dem Import sortieren oder per VBA-Code sortieren lassen.
Ansonsten kannst Du in der leeren Excel-Datei schon mal ein 2. Tabellenblatt einfügen und einen Tabellennamen für die Tabelle <Import-Daten> und die Tabelle <Datei-Liste> festlegen. Letzteres kann nach den entsprechenden Einträgen auch ausgeblendet werden.
Bei gleichem Ordner, könnte die Tabelle Datei-Liste so aussehen:
A | B | |
1 | Ordner: | z.B. C:\Test\ |
2 | ||
3 | Dateien: | z.B. Test1.xls |
4 | z.B. Test2.xls | |
5 | usw. |
A | |
1 | Pfad Import-Datei1 |
2 | Pfad Import-Datei2 |
3 | usw. |
Die Tabellennamen und wo in Datei-Liste was drinsteht musst Du mir natürlich mitteilen
Gruß Dieter
Hallo Carlos!
OK. Das Makro kann nicht angepasst werden, d.h. ich muss ein neues schreiben. Das kriegst Du aber heute noch
Grüße und ein schönes WE
Dieter
OK. Das Makro kann nicht angepasst werden, d.h. ich muss ein neues schreiben. Das kriegst Du aber heute noch
Grüße und ein schönes WE
Dieter
Hallo Carlos!
Hier der neue Makro-Code:
Anmerkung:
In der Zeile 3 den Namen Deiner leeren Excel-Datei festlegen.
Im Tabellenblatt <Import-Daten> können die Zeilen 1-2 nach belieben beschriftet werden.
Existiert eine Datei nicht, dann wird der Vorgang abgebrochen und eine Fehlermeldung ausgegeben.
Die Datei-Pfade in <Datei-Liste> müssen untereinander ohne Leerzeilen eingetragen werden.
Hoffe, das es bei Dir auch funktioniert
Gruß Dieter
Hier der neue Makro-Code:
Option Explicit
Const HomeDatei = "LeereArbeitsmappe.xls" 'Name Arbeitsmappe Makro-Excel-Datei
Const HomeDaten = "Daten-Import" 'Name Tabellenblatt Daten-Import
Const HomeListe = "Datei-Liste" 'Name Tabellenblatt Datei-Liste
Const HomeZeile = 3 'Erste Zeile Einfügen
Const CopyZeile = 3 'Erste Zeile Kopieren
Const ListDatei = "A1" 'Zelle erster Dateiname
Const ErrMsg = "Abbruch! Datei existiert nicht: "
Sub SheetsImport()
Dim WksHome As Worksheet, WksList As Worksheet, EndLine As Integer, NextLine As Integer
Dim WkbCopy As Workbook, WksCopy As Worksheet, Fso As Object, File As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
Set WksHome = Workbooks(HomeDatei).Sheets(HomeDaten)
Set WksList = Workbooks(HomeDatei).Sheets(HomeListe)
EndLine = GetEndLine(WksHome): NextLine = HomeZeile
If EndLine >= HomeZeile Then WksHome.Rows("3:" & EndLine).Cells.Clear
Application.ScreenUpdating = False
For Each File In WksList.Range(ListDatei).CurrentRegion
If Fso.FileExists(File) = False Then
Application.ScreenUpdating = True
MsgBox ErrMsg & File, vbExclamation, "Fehler": Exit Sub
End If
Set WkbCopy = Workbooks.Open(File): Set WksCopy = WkbCopy.Sheets(1)
EndLine = GetEndLine(WksCopy)
If EndLine >= CopyZeile Then
WksCopy.Rows("3:" & EndLine).Copy
WksHome.Rows(NextLine).Insert Shift:=xlDown
Application.CutCopyMode = False
WkbCopy.Saved = True: WkbCopy.Close
NextLine = GetEndLine(WksHome) + 1
End If
Next
Application.ScreenUpdating = True
End Sub
Private Function GetEndLine(ByRef Wks) As Integer
GetEndLine = Wks.Cells(Wks.Rows.Count, "A").End(xlUp).Row
End Function
Anmerkung:
In der Zeile 3 den Namen Deiner leeren Excel-Datei festlegen.
Im Tabellenblatt <Import-Daten> können die Zeilen 1-2 nach belieben beschriftet werden.
Existiert eine Datei nicht, dann wird der Vorgang abgebrochen und eine Fehlermeldung ausgegeben.
Die Datei-Pfade in <Datei-Liste> müssen untereinander ohne Leerzeilen eingetragen werden.
Hoffe, das es bei Dir auch funktioniert
Gruß Dieter
Hallo Carlos!
Super, da funktioniert ja mal was Und Nö, bin leider nicht bei Xing registriert.
Auch Dir noch einen schönen Sonntag.
Gruß Dieter
Super, da funktioniert ja mal was Und Nö, bin leider nicht bei Xing registriert.
Auch Dir noch einen schönen Sonntag.
Gruß Dieter