Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

aktualisieren ohne alles nochmal einzufügen


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

Ich bin euch für eure Hilfe sehr Dankbar.

Viele Grüße,
Bene

  

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

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


  

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

mit
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

Gruss Torsten


  

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


Beiträge aus dem Excel-Forum zum Thema "aktualisieren ohne alles nochmal einzufügen"