Informationen und Beispiele zum Thema MsgBox | |
---|---|
![]() |
MsgBox-Seite mit Beispielarbeitsmappe aufrufen |
Betrifft: aktualisieren ohne alles nochmal einzufügen
von: Bene Bene
Geschrieben am: 25.09.2019 11:09:57
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
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Torsten
Geschrieben am: 25.09.2019 11:25:30
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
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Torsten
Geschrieben am: 25.09.2019 11:37:22
Sorry,
hab in dieser Zeile was vergessen, bitte ersetzen:
dies ersetzen
For Each ws In oTargetBook
For Each ws In oTargetBook.Worksheets
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Torsten
Geschrieben am: 25.09.2019 11:41:02
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
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Bene Bene
Geschrieben am: 25.09.2019 11:44:18
VIELEN DANK TORSTEN
klappt hervorragend
Betrifft: gerne...
von: Torsten
Geschrieben am: 25.09.2019 11:45:36
viel Spass
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Bene Bene
Geschrieben am: 25.09.2019 11:40:24
Hi Torsten,
das klappt leider nicht.
For Each ws In oTargetBook wird gelb markiert
VG
Bene
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Torsten
Geschrieben am: 25.09.2019 11:42:27
Sorry, hatte den Code nicht getestet. Siehe nochmal meinen Post von 11:41
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Günther
Geschrieben am: 25.09.2019 11:28:49
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
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Luschi
Geschrieben am: 25.09.2019 11:45:44
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
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Torsten
Geschrieben am: 25.09.2019 11:51:27
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
Betrifft: AW: aktualisieren ohne alles nochmal einzufügen
von: Luschi
Geschrieben am: 25.09.2019 12:51:42
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