Alle Tabellenblätter in ein neues Kopieren - Makro

Dieses Thema Alle Tabellenblätter in ein neues Kopieren - Makro im Forum "Microsoft Office Suite" wurde erstellt von Seb, 19. Juni 2008.

Thema: Alle Tabellenblätter in ein neues Kopieren - Makro Hallo! Ich habe eine Datei, die mehrere Tabellenblätter beinhaltet, die täglich aktualisiert werden. Jetzt möchte...

  1. Seb
    Seb
    Hallo!

    Ich habe eine Datei, die mehrere Tabellenblätter beinhaltet, die täglich aktualisiert werden. Jetzt möchte ich am Ende des Tages alle Blätter in einem Zusammenfassen. Wie kriege ich das am geschicktesten mit einem Makro hin? Würde mich über eure Hilfe sehr freuen!

    Thx & Gruß
    Seb
     
  2. Ola,

    du richtest die einmal ein Zusammenfassendes Tabellenblatt ein und verwendest dabei dynamische 3d-Bezüge (siehe Hilfe). Dann brauchst du die Tabellenblätter, immer nur in den Bereich zu ziehen. Voraussetzung ist (auch für ein Makro), dass die Tabellenblätter identisch aufgebaut sind.
     
  3. Hallo Seb,

    mit dem folgenden Makro sollte das zu erledigen sein. Er fasst alle Tabellenblätter der aktuellen Arbeitsmappe in einem zusätzlichen Blatt->Zusammenfassung' zusammen.

    Unter ANPASSEN müßtest du die konstanten entsprechend deiner Werte anpassen.

    Gruß Matjes :)
    Code:
    Option Explicit
    'Makro zum Zusammenfassen aller Blätter der aktiven Arbeitsmappe auf einem
    'neuen Blatt->Zusammenfassung'
    'Voraussetzung: Alle Blätter haben die gleiche Spaltenstruktur Bedeutung/Format
    '
    '<<< A N P A S S E N >>>
    'ZeileNr vor der erster Zeile mit zu übertragenden Werten, hier also eine Überschriftenzeile
    Private Const cZ_ZeileVorErsterWerteZeile = 1
    'Name des Zusammenfassungs-Blattes
    Private Const cBLT_NAME_ZUS = Zusammenfassung
    '<<< A N P A S S E N  E N D E >>>
    
    
    Sub AlleBlaetterZusammenfassen()
     Dim wb As Workbook, ws As Worksheet, wsz As Worksheet
     Dim lRows As Long, lCols As Long, z As Long
    
     Set wb = ActiveWorkbook
    ->pruefen, ob es schon ein Blatt->Zusammenfassung' gibt
     On Error Resume Next
     Set ws = wb.Worksheets(cBLT_NAME_ZUS)
     On Error GoTo 0
     If Not ws Is Nothing Then
      MsgBox ein Blatt nit Namen  & cBLT_NAME_ZUS &  ist bereits vorhanden.
      GoTo AUFRAEUMEN
     End If
     
    ->erstes Blatt als Grundlage für Zusammenfassung kopieren
     Set ws = wb.Worksheets(1)
     ws.Copy Before:=ws
     
    ->Zusammenfassungsblatt setzen
     Set wsz = wb.Worksheets(1)
     wsz.Name = cBLT_NAME_ZUS
    
    ->Über alle Blätter
     z = cZ_ZeileVorErsterWerteZeile
     For Each ws In wb.Worksheets
      If ws.Name <> cBLT_NAME_ZUS Then
       Call LetzteZeileSpalteBestimmen(ws, lCols, lRows)
       If lRows > cZ_ZeileVorErsterWerteZeile Then
        ws.Range( _
         ws.Cells(cZ_ZeileVorErsterWerteZeile + 1, 1), _
         ws.Cells(lRows, lCols) _
         ).Copy
        z = z + 1
        wsz.Range(wsz.Cells(z, 1), wsz.Cells(z, 1)).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        z = z + lRows - cZ_ZeileVorErsterWerteZeile - 1
       End If
      End If
     Next
    AUFRAEUMEN:
     Set wb = Nothing: Set ws = Nothing: Set wsz = Nothing
    End Sub
    
    
    Function LetzteZeileSpalteBestimmen(ws As Worksheet, lCols As Long, lRows As Long)
     Dim lZeile As Long, lSpalte As Long, bLeer As Boolean
     lCols = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1
     lRows = 0
     For lSpalte = 1 To lCols
      lZeile = ws.Cells(ws.Rows.Count, lSpalte).End(xlUp).Row
      If lRows < lZeile Then lRows = lZeile
     Next
     If lRows = 1 Then
     ->zusätzlich die erste Zeile auf Inhalt überprüfen,
      bLeer = True
      For lSpalte = 1 To lCols
       If ws.Cells(1, lSpalte).Value <>  Then bLeer = False: Exit For
      Next
      If bLeer Then lRows = 0
     End If
    End Function
     
  4. Seb
    Seb
    Hi!

    Danke erst mal PCDjoe. Die Lösung von Matjes scheint mir am komfortabelsten :) THX a lot! Verstehe nur noch nicht ganz genau, das die erste Anpassungsmöglichkeit bietet. Wenn dort 1 steht, kopiert er einmal die Kopfzeile am Anfang der Zusammenfassungsdatei und dann nicht wieder? Wenn da 0 oder 3 steht, was genau wird verändert? Er schneidet dann die ersten drei Zeilen ab beim kopieren?

    Vielen Dank für deine Mühe!
    Grüße Seb
     
  5. Hallo Seb,

    cZ_ZeileVorErsterWerteZeile gibt die Anzahl der Zeilen an, die beim Kopieren ausgelassen werden. Also 0 - keine, 3 - die ersten 3, ...

    Das dient dazu, die Überschriften nicht mitzukopieren. Die werden nämlich beim Anlegen des Blattes->Zusammenfassung' einmalig übernommen, das durch Kopieren des ersten Blattes entsteht.

    Gruß Matjes ;)
     
  6. Seb
    Seb
    oki! Wunderbar, genau das was ich gebraucht habe, danke dir!

    Gruß
    seb
     
Die Seite wird geladen...

Alle Tabellenblätter in ein neues Kopieren - Makro - Ähnliche Themen

Forum Datum
Re: Liste bestimmter Werte aus allen Tabellenblättern erstellen Windows XP Forum 12. Mai 2009
Liste bestimmter Werte aus allen Tabellenblättern erstellen Windows XP Forum 12. Mai 2009
Mein PC stürzt bei allen Spielen ab Windows 10 Forum 4. Dez. 2016
blocked events sony windows installer Windows 7 Forum 4. Aug. 2016
Win 7 & 10 Parallel aber getrennt voneinander Software: Empfehlungen, Gesuche & Problemlösungen 6. Juni 2016