AW: Zellen kopieren mit VBA
04.05.2010 10:44:43
fcs
Hallo Sebastian,
nachfolgend Prozeduren, die du bezüglich Tabellennamen, Zeilennummern und auszuwertender Zellen anpassen muss.
Sie fügen in der Übersicht in Spalte A (1) die Tabellennamen ein und in den Zellen rechts daneben INDIREKT-Formeln zu den Zellen, deren Ergebnisse angezeigt werden sollen. Die Prozeduren in einem allgemeinen Modul der Datei einfügen.
Option Explicit
Public StatusUpdate As Boolean, NumberSheets As Long
Sub UpdateZusammenfassung()
'Infos aus Tabellenblättern zusammenfassen
Dim arrZellen, wks As Worksheet, wksZiel As Worksheet
Dim Zeile1 As Long, Zeile As Long, Spalte As Long, iK As Long
Dim StatusCalc As Long
If StatusUpdate = False Then
StatusUpdate = True 'verhindert rekursive Aufrufe der Prozedur während der Ausführung
If NumberSheets ThisWorkbook.Sheets.Count Then
'Makrobremsen deaktivieren
With Application
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
'Zieltabelle mit Zusammenfassung
Set wksZiel = Worksheets("Übersicht")
'Array mit den Zellen, die ausgewertet werden sollen, _
Reihenfolge = Reihenfolge bei Ausgabe im Zielblatt
arrZellen = Array("B4", "C4", "H8")
Zeile1 = 5 'Zeile ab der Zusammenfassung eingetragen werden soll
With wksZiel
'Altdaten Löschen
If .Cells(.Rows.Count, 1).End(xlUp).Row >= Zeile1 Then
.Range(.Rows(Zeile1), .Rows(.Cells(.Rows.Count, 1).End(xlUp).Row)).ClearContents
End If
'Tabellenblätter abarbeiten
Zeile = Zeile1
For Each wks In ActiveWorkbook.Worksheets
Select Case wks.Name
Case "Übersicht", "TabelleXYZ"
'Namen der Blätter, die nicht ausgewertet werden sollen
Case Else
'Tabellenname eintragen
Spalte = 1
.Cells(Zeile, Spalte) = wks.Name
'INDIREKT-Formeln eintragen
For iK = LBound(arrZellen) To UBound(arrZellen)
Spalte = Spalte + 1
.Cells(Zeile, Spalte).FormulaR1C1 = "=INDIRECT(""'""&RC1&""'!" _
& arrZellen(iK) & """)"
Next
Zeile = Zeile + 1
End Select
Next
.Calculate
End With
NumberSheets = ThisWorkbook.Sheets.Count
'Makrobremsen zurücksetzen
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
End If
StatusUpdate = False
End If
End Sub
Für die automatische Anpassung beim Löschen und Einfügen von Blättern muss du im VBA-Editor
unter "DieseArbeitsmappe" einfügen:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Call UpdateZusammenfassung
End Sub
Private Sub Workbook_Open()
NumberSheets = Me.Sheets.Count
End Sub
Unter dem Blatt mit der Übersicht:
Private Sub Worksheet_Calculate()
Call UpdateZusammenfassung
End Sub
Gruß
Franz