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

aktualisieren ohne alles nochmal einzufügen

aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:09:57
Bene
Hallo Zusammen,
Ich habe ein Problem und benötige dringend Hilfe.
Ich habe in einem Ordner (KW-KÖLN) viele Excel Dateien und kopiere jede Datei und füge sie als Tabelle in eine andere Excel-Datei „Zusammenfassung“ ein.
Also statt 10 Excel Dateien habe ich eine Excel Datei „Zusammenfassung“ mit 10 Tabellen.
Mein Ordner (KW-KÖLN) wird aber stündlich mit einer neuen Excel Datei erweitert. Mit dem Code ist es nicht möglich die Excel-Datei („Zusammenfassung“) zu aktualisieren.
Denn mit dem Code werden nochmal alle Dateien als Tabelle eingefügt.
Das heißt: In dem Ordner habe ich nach einer Stunde 11 Dateien und in meine Excel-Datei („Zusammenfassung“) statt 11 Tabellen 21 Tabellen, da die vorherigen 10 Excel Dateien nochmal kopiert und als Tabelle eingefügt werden.
Mein Ziel ist es, dass zunächst einmal alle Dateien aus KW-KÖLN kopiert und als Tabelle eingefügt werden und später nur die neu hinzugekommenen .
Sub HI()
Dim oTargetBook As Object
Dim oSourceBook As Object
Dim sPfad As String
Dim sDatei As String
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
Application.DisplayAlerts = False 'Keine Fehlermeldungen anzeigen
'Schritt 1: Arbeitsmappe festlegen, in die die neuen Sheets eingefügt werden...
Set oTargetBook = ActiveWorkbook
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "C:\Users\PNL\Desktop\BENE\"
sDatei = Dir(CStr(sPfad & "*.csv*")) 'Alle Excel Dateien
Do While sDatei  ""
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend öffnen
'Es wird immer das erste Tabellenblatt Sheets(1) kopiert!
oSourceBook.Sheets(1).Copy after:=oTargetBook.Sheets(oTargetBook.Sheets.Count)
On Error Resume Next
'Arbeitsblattname wird der Dateiname
oTargetBook.Sheets(oTargetBook.Sheets.Count).Name = sDatei
'Wenn ein Fehler aufgetreten ist, wird dieser resettet
If Err.Number  0 Then
Err.Number = 0
Err.Clear
End If
On Error GoTo 0
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'Nächste Datei
sDatei = Dir()
Loop
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
Application.DisplayAlerts = True 'Fehlermeldungen wieder anzeigen
'Kleine finale Fertig-Meldung
MsgBox "Fertig!", vbInformation + vbOKOnly, "Hinweis!"
'Variablen aufräumen
Set oTargetBook = Nothing
Set oSourceBook = Nothing
End Sub

Ich bin euch für eure Hilfe sehr Dankbar.
Viele Grüße,
Bene

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:25:30
Torsten
Hallo Bene,
versuchs mal so:

Sub HI()
Dim oTargetBook As Object
Dim oSourceBook As Object
Dim sPfad As String
Dim sDatei As String
Dim ws As Worksheet
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
Application.DisplayAlerts = False 'Keine Fehlermeldungen anzeigen
'Schritt 1: Arbeitsmappe festlegen, in die die neuen Sheets eingefügt werden...
Set oTargetBook = ActiveWorkbook
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "C:\Users\torsten.wetzel\Downloads\"
sDatei = Dir(CStr(sPfad & "*.csv*")) 'Alle Excel Dateien
Do While sDatei  ""
For Each ws In oTargetBook
If ws.Name = sDatei Then
GoTo Naechste
Else
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend ö _
ffnen
'Es wird immer das erste Tabellenblatt Sheets(1) kopiert!
oSourceBook.Sheets(1).Copy After:=oTargetBook.Sheets(oTargetBook.Sheets.Count)
On Error Resume Next
'Arbeitsblattname wird der Dateiname
oTargetBook.Sheets(oTargetBook.Sheets.Count).Name = sDatei
'Wenn ein Fehler aufgetreten ist, wird dieser resettet
If Err.Number  0 Then
Err.Number = 0
Err.Clear
End If
On Error GoTo 0
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'Nächste Datei
Naechste:               sDatei = Dir()
End If
Next
Loop
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
Application.DisplayAlerts = True 'Fehlermeldungen wieder anzeigen
'Kleine finale Fertig-Meldung
MsgBox "Fertig!", vbInformation + vbOKOnly, "Hinweis!"
'Variablen aufräumen
Set oTargetBook = Nothing
Set oSourceBook = Nothing
End Sub

Hier wird am Anfang der Do Schleife der aktuelle Dateiname mit allen Blattnamen verglichen, wenn ein Blattname mit dem Dateinamen uebereinstimmt, wird die naechste Datei genommen. Also sollte nur die neu hinzugekommene Datei kopiert werden.
Gruss Torsten
Anzeige
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:37:22
Torsten
Sorry,
hab in dieser Zeile was vergessen, bitte ersetzen:
dies ersetzen

For Each ws In oTargetBook

mit
For Each ws In oTargetBook.Worksheets

AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:41:02
Torsten
Und nochmal,
vergiss den Code komplett von vorher. Nimm diesen, sorry:

Sub HI()
Dim oTargetBook As Object
Dim oSourceBook As Object
Dim sPfad As String
Dim sDatei As String
Dim ws As Worksheet
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
Application.DisplayAlerts = False 'Keine Fehlermeldungen anzeigen
'Schritt 1: Arbeitsmappe festlegen, in die die neuen Sheets eingefügt werden...
Set oTargetBook = ActiveWorkbook
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = "C:\Users\torsten.wetzel\Downloads\"
sDatei = Dir(CStr(sPfad & "*.csv*")) 'Alle Excel Dateien
Do While sDatei  ""
For Each ws In oTargetBook.Worksheets
If ws.Name = sDatei Then
GoTo Naechste
End If
Next
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend ö _
ffnen
'Es wird immer das erste Tabellenblatt Sheets(1) kopiert!
oSourceBook.Sheets(1).Copy After:=oTargetBook.Sheets(oTargetBook.Sheets.Count)
On Error Resume Next
'Arbeitsblattname wird der Dateiname
oTargetBook.Sheets(oTargetBook.Sheets.Count).Name = sDatei
'Wenn ein Fehler aufgetreten ist, wird dieser resettet
If Err.Number  0 Then
Err.Number = 0
Err.Clear
End If
On Error GoTo 0
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'Nächste Datei
Naechste:               sDatei = Dir()
Loop
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
Application.DisplayAlerts = True 'Fehlermeldungen wieder anzeigen
'Kleine finale Fertig-Meldung
MsgBox "Fertig!", vbInformation + vbOKOnly, "Hinweis!"
'Variablen aufräumen
Set oTargetBook = Nothing
Set oSourceBook = Nothing
End Sub

Gruss Torsten
Anzeige
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:44:18
Bene
VIELEN DANK TORSTEN
klappt hervorragend
gerne...
25.09.2019 11:45:36
Torsten
viel Spass
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:40:24
Bene
Hi Torsten,
das klappt leider nicht.
For Each ws In oTargetBook wird gelb markiert
VG
Bene
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:42:27
Torsten
Sorry, hatte den Code nicht getestet. Siehe nochmal meinen Post von 11:41
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:28:49
Günther
Du brauchst DRINGEND Hilfe?
Dann frage doch Hans, den Betreiber dieses Forums. Er macht das bestimmt gerne und rasch ... (schließlich lebt er davon).
Gruß
Günther
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:45:44
Luschi
Hallo Bene,
da sehe ich 3 Möglichkeiten:
- eingelesene csv-Datei verschieben in 1 Unterverzeichnis
- eingelesene scv-Datei umbenennen in *.cs_v
- protokollieren des Einlesevorganges und Dateinamen vergleichen (aufwendigstes Verfahren)
Gruß von Luschi
aus klein-Paris
Anzeige
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 11:51:27
Torsten
Hallo Luschi,
warum so kompliziert. Meine Loesung war, Blattnamen mit Dateiname vergleichen in einer For Next.
Geh zur naechsten Datei, wenn Dateiname schon als Blattname vorhanden.
Geht, weil Blattname=Dateiname beim kopieren.
Gruss Torsten
AW: aktualisieren ohne alles nochmal einzufügen
25.09.2019 12:51:42
Luschi
Hallo Torsten,
sicher kann man meine Vorgehen als kompliziert ansehen, aber dafür halte ich ein bißchen mehr Ordnung im Dateisystem und kann beim Blick in den Ordner leicht erkennen, welche Datei schon in der Zusammenfassungsdatei drin ist - und das Erstellen von BackUps ist auch leichter.
Gruß von Luschi
aus klein-Paris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige