Thema Datum  Von Nutzer Rating
Antwort
02.07.2021 17:08:23 Barti
NotSolved
Blau Mit Makro nur Werte und Formate von einer Datei in eine andere Datei kopieren
02.07.2021 21:22:23 Gast42896
NotSolved
02.07.2021 21:38:42 Gast63377
NotSolved
05.07.2021 14:15:39 Barti
NotSolved
06.07.2021 13:57:28 Gast5609
****
Solved
12.07.2021 10:26:56 Gast55012
NotSolved
08.09.2021 13:56:52 Barti
NotSolved

Ansicht des Beitrags:
Von:
Gast42896
Datum:
02.07.2021 21:22:23
Views:
459
Rating: Antwort:
  Ja
Thema:
Mit Makro nur Werte und Formate von einer Datei in eine andere Datei kopieren

Hallo Barti,

da ich mein Makro nicht getestet habe, kann es sein, dass es nicht auf Anhieb funktioniert. Alles in allem ist das Folgende aber der Weg, den Du gehen willst denke ich. Wie so oft, habe ich mehr Kommentare als Quelltext geschrieben. Lies die bitte, da wird alles erklärt:

Sub Chronik_Aktualisieren()

'Variablen werden bei Verwendung ausführlich erklärt
Dim pfadKollegenDateien As String
Dim chronikTabelle As Worksheet
Dim letzteZeileHauptChronik As Long
Dim kollegenDatei As String
Dim letzteZeileKollegenDatei As Long

  'Ich gehe davon aus, dass die Dateien der Kollegen alle im gleichen
  'Verzeichnis liegen und alle beim Makrostart geschlossen sind
  ' Falls nicht, frage ich mich, warum ;-)
  '(Im weiteren Verlauf des Makros gehe ich davon aus, dass es
  ' die einzigen Excel-Dateien im Verzeichnis sind)
  pfadKollegenDateien = "Hier der Pfad zu den Dateien, ZWINGEND mit abschließendem Backslash\"
  
  'Bei der Arbeit mit mehreren Dateien immer vollständig referenzieren
  'Also auf die Excel-Datei und die gewünschte Tabelle darin
  '
  'Ein Grund ist, dass Activate und Select komplett weggelassen werden
  'können: Das macht das Programmieren wesentlich übersichtlicher und die
  'Qualität des Quellcodes wesentlich besser, weil weniger Code nötig ist
  '
  'Ein weiterer Grund ist, man kann sich sonst sehr schnell sehr blöde
  'Fehler einhandeln, weil in der falschen Tabelle der falschen Datei
  'gearbeitet wird oder ein angegebener Tabellenname nicht gefunden wird,
  'weil er in der falschen Datei gesucht wird
  '
  'Braucht man nur eine Tabelle, die in in einer Excel-Datei liegt,
  'kann man das machen, indem die Referenz auf die Arbeitsmappe einfach
  'vorangestellt wird
  '(Beachte: Workbooks und Sheets sind Objekte. Deshalb muss die
  ' Variablen-Zuweisung mit Set erfolgen)
  Set chronikTabelle = Workbooks("Projektauswertung.xls").Sheets("Chronik")
  
  'Rausfinden der letzten belegten Zeile in der Arbeits-Tabelle
  'Die letzte belgte Zelle wird in Spalte A nachgesehen
  'Für z.B. Spalte D würde man statt (Rows.Count, 1),
  '(Rows.Count, 4) schreiben
  'Mehr infos und andere Möglichkeiten zum feststellen der letzten belegten Zeile oder Spalte:
  'https://www.excel-inside.de/vba-loesungen/zellen-a-bereiche/337-letzte-zeile-letzte-spalte-und-letzte-zelle-per-vba-ermitteln
  letzteZeileHauptChronik = chronikTabelle.Cells(Rows.Count, 1).End(xlUp).Row
  
  'Löschen von alten Daten
  'Nie pauschal alle möglichen Zeilen einer Tabelle bearbeiten
  'Es ist besser, genau den gewünschten Bereich zu definieren
  'Beachte, dass hier die oben angelegte Referenz auf die Tabelle
  'verwendet wird
  'Der Zusatz shift:=xlUp "zieht" den unter dem Löschbereich liegenden
  'Bereich nach oben. Die andere Möglichkeit ist von rechts nach links
  'Ich weiß aber nicht was default ist
  chronikTabelle.Range("A2", "K" & letzteZeileHauptChronik).Delete shift:=xlUp
  
  'Chroniken der Kollegen kopieren
  'Das kann für beliebig viele Kollegen Excel-Dateien)
  'in einer Schleife erfolgen
  'In Schleifen werden Aufgaben programmiert, die immer gleich sind
  '
  'Hier kommt zum Tragen, was ich oben schrieb:
  'Alle zu verarbeitenden Dateien müssen im gleichen Verzeichnis liegen
  'und es dürfen keine weiteren Excel-Dateien darin sein
  'Dann geht das so:
  'Das Durchgehen des Kollegen-Verzeichnis für den
  'gewünschten Datentyp einleiten
  kollegenDatei = Dir$(pfadKollegenDateien & "*.xls")
  '
  'Schleife für beliebig viele Dateien öffnen
  'Falls keine Datei vorhanden ist, muss die Abbruchbedingung
  'der Schleife im Schleifenkopf definiert werden
  '(Der Schleifenkopf ist die Zeile, die die Schleife öffnet
  ' Der Schleifenfuß ist die Zeile, die die Schleife nach unten begrenzt)
  '
  'Beende die Schleife, wenn kein weiterer Dateiname gefunden wurde
  Do While kollegenDatei <> ""
    'Kollegendatei öffnen, aus dem oben definierten Pfad
    '(Diese Datei hat jetzt den Fokus, ist also die eigentlich aktive Datei
    ' Da wir aber mit vollständigen Referenzen auf alle Tabellen arbeiten,
    ' brauchen wir uns darum keine Gedanken machen)
    Workbooks.Open pfadKollegenDateien & kollegenDatei
    
    'Der Übersicht halber und um den Code zu verkürzen, beziehen
    'wir alles was im Folgenden mit Punkt (.) beginnt, auf die
    'Kollegen-Datei und die Chronik-Tabelle darin
    With Workbooks(kollegenDatei).Sheets("Chronik")
      'Die letzte Zeile in der Kollegen-Tabelle und der
      'Sammel-Tabelle feststellen
      letzteZeileKollegenDatei = .Cells(Rows.Count, 1).End(xlUp).Row
      'Auf das + 1 am Ende achten, damit die erste leere Zeile erwischt wird
      letzteZeileHauptChronik = chronikTabelle.Cells(Rows.Count, 1).End(xlUp).Row + 1
      
      'Daten kopieren
      .Range(Cells(2, 1), Cells(letzteZeileKollegenDatei, 11)).Copy
      
      'Nur Werte in die Sammel-Datei einfügen
      chronikTabelle.Range(Cells(letzteZeileHauptChronik, 1), _
          Cells(letzteZeileHauptChronik + letzteZeileKollegenDatei, 11)).PasteSpecial Paste:=xlValues
      
      'Nur Formate einfügen
      chronikTabelle.Range(Cells(letzteZeileHauptChronik, 1), _
          Cells(letzteZeileHauptChronik + letzteZeileKollegenDatei, 11)).PasteSpecial Paste:=xlPasteFormats
      
    'Den Bezug auf die Tabelle Chronik in der Kollegen-Datei beenden
    End With
    
    'Geöffnete Kollegen-Datei schließen ohne zu speichern
    Workbooks(pfadKollegenDateien).Close SaveChanges:=False
    
    'Nächsten Dateinamen aus Verzeichnis lesen
    kollegenDatei = Dir$()
  'Ende des Schleifenblocks, also der Schleifenfuß
  Loop
End Sub

Viele Grüße,

Zwenn


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
02.07.2021 17:08:23 Barti
NotSolved
Blau Mit Makro nur Werte und Formate von einer Datei in eine andere Datei kopieren
02.07.2021 21:22:23 Gast42896
NotSolved
02.07.2021 21:38:42 Gast63377
NotSolved
05.07.2021 14:15:39 Barti
NotSolved
06.07.2021 13:57:28 Gast5609
****
Solved
12.07.2021 10:26:56 Gast55012
NotSolved
08.09.2021 13:56:52 Barti
NotSolved