27.11.2012

Summe aus unbestimmter Anzahl Tabellenblätter...

Frage: Aus einer unbekannten Anzahl Tabellenblätter (die Anzahl kann auch mehr werden - die Startposition ist aber immer das dritte Tabellenblatt), soll die Summe aus Spalte C in einem Tabellenblatt "Auswertung" gezogen werden. Die Namen der Tabellenblätter sollen automatisch in Spalte A gelistet sein die Summen in Spalte B. Wie geht das?

Hier noch eine Beispieldatei: Summe aus unbestimmter Anzahl Tabellenblätter...

Option Explicit
'-------------------------------------------------------------------------- 
' Module    : Modul1 
' Procedure : Main 
' Author    : Case (Ralf Stolzenburg) 
' Date      : 27.11.2012 
' Purpose   : Summe aus unbestimmter Anzahl Tabellenblätter... 
'-------------------------------------------------------------------------- 
Sub Main()
    ' Dimensionieren der Variablen 
    Dim wksSheet As Worksheet
    Dim lngLastRow As Long
    ' Wenn ein Fehler auftritt gehe zu der angegebenen Sprungmarke 
    On Error GoTo Fin
    ' Der Code bezieht sich auf ein bestimmtes Objekt 
    ' Hier Tabelle "Auswertung" 
    ' Alles was sich auf dieses "With" bezieht MUSS mit einem Punkt beginnen 
    With ThisWorkbook.Worksheets("Auswertung")
        ' lösche ab Zeile 2 abwärts den Inhalt raus 
        .Rows("2:" & .Rows.Count).ClearContents
        ' Alle Tabellenblätter in der Mappe mit dem Code 
        For Each wksSheet In ThisWorkbook.Worksheets
            ' Wenn die Tabelle am Index > 2 ist, dann... 
            If wksSheet.Index > 2 Then
                ' schreibe den Tabellenblattnamen der Tabellen AB Index 3 
                ' in Spalte A in die erste freie Zelle 
                .Range("A" & Rows.Count).End(xlUp) _
                    .Offset(1, 0).Value = wksSheet.Name
            End If
        Next wksSheet
        ' Bestimme jetzt die Anzahl der Zeilen in Spalte A 
        lngLastRow = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
            .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
        ' Trage nun in Spalte B ab Zeile 2 bis Ende Spalte A die Formel 
        ' =WENN(ISTFEHLER(SUMME(INDIREKT(A2&"!C:C"))); 
        ' "-";SUMME(INDIREKT(A2&"!C:C"))) ein 
        .Range("B2:B" & lngLastRow).Formula = _
            "=IF(ISERROR(SUM(INDIRECT(A2&""!C:C"")))," & _
            """-"",SUM(INDIRECT(A2&""!C:C"")))"
        ' Wandel die Formel in Werte um 
        .Range("B2:B" & lngLastRow).Value = .Range("B2:B" & lngLastRow).Value
    End With
Fin:
    ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung 
    If Err.Number <> 0 Then MsgBox "Error: " & _
        Err.Number & " " & Err.Description
End Sub

Formeln auf einer UserForm in einer TextBox darstellen...

Formeln auf einer UserForm in einer TextBox anzeigen. Z. B. "Formula", "FormulaLocal"... und wie muss die Formel in VBA ...