Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: WorksheetFunction.Sum

WorksheetFunction.Sum
04.12.2020 12:24:57
Jochen
Hallo Ihr Lieben meine Nerven sind am Ende. Daher jetzt hier die Frage. Hab schon ca. 1h online gesucht.
Ich will WorksheetFunction.Sum in einem Makro aus einer Tabelle in anderen Tabellen ausführen diese sind variabel daher gehen bzw. will ich über den Index gehen.
Habe das ganze so Probiert

Sub vergl()
Dim letzZeil, wksi As Long, sumakt, sum1, sum2 As Variant
Dim Vergl1, Vergl2, Vergl1Proz, Vergl2Proz As Integer
Dim grün As Boolean
Dim wks1, wks2, wksa As Worksheet
wksi = ActiveSheet.Index
Set wksa = ActiveSheet
Set wks1 = Sheets(wksi - 12)
Set wks2 = Sheets((wksi - 24))
letzZeil = ActiveSheet.Cells(27, 5).End(xlUp).Row
sumakt = WorksheetFunction.Sum(wksa.Range(Cells(1, 5), Cells(letzZeil, 5)))
'Sheets(wksi - 12).Activate
sum1 = WorksheetFunction.Sum(wks1.Range(Cells(1, 5), Cells(letzZeil, 5)))
'Sheets(wksi - 24).Activate
sum2 = WorksheetFunction.Sum(wks2.Range(Cells(1, 5), Cells(letzZeil, 5)))
If sumakt > sum1 Then
Vergl1 = sumakt - sum1
Vergl1Proz = sumakt * 100 / sum1 - 100
grün = True
Else
Vergl1 = sum1 - sumakt
Vergl1Proz = sumakt * 100 / sum1 - 100
grün = False
End If
If sumakt > sum2 Then
Vergl2 = sumakt - sum2
Vergl2Proz = sumakt * 100 / sum2 - 100
grün = True
Else
Vergl1 = sum2 - sumakt
Vergl2Proz = sumakt * 100 / sum2 - 100
grün = False
End If
Sheets(wksi).Activate
If grün Then
ActiveSheet.Range(Cells(16, 1), Cells(17, 1)).Interior.ColorIndex = 4
Else
ActiveSheet.Range(Cells(16, 1), Cells(17, 1)).Interior.ColorIndex = 3
End If
Cells(16, 1).Value = "Zum Vorjahr tagesaktueller Vergleichswert: " & Round(Vergl1, 0) & " €"
Cells(17, 1).Value = "Zum Vorjahr tagesaktueller Prozentabweichung: " & Round(Vergl1Proz, 0) & " _
_
_
End Sub

Ich bekomme da aber bei der sum1 und sum2 immer den Fehler 1004 Anwendungs und Objektorientierter Fehler,
Ich habe es mit Klartext probiert "Sheets(130).Range" ; mit "Sheets(" Name".Range)"
Immer der gleiche Fehler.
Es geht nur wenn ich über sheets(Index).activate gehe und dann dort die
sum1 = WorksheetFunction.Sum(Range(Cells(1, 5), Cells(letzZeil, 5)))
aufrufe.
Das geht dann aber wieder nicht mehr wenn ich die Sub in " Private Sub Worksheet_Activate()"
verschiebe wo sie eigentlich hin soll.
Vielleicht kann von Euch jemand helfen.
Schon mal vielen Dank
Gruss Jochen
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: WorksheetFunction.Sum
04.12.2020 12:48:13
peterk
Hallo

sum1 = WorksheetFunction.Sum(wks1.Range(wks1.Cells(1, 5), wks1.Cells(letzZeil, 5)))

AW: WorksheetFunction.Sum
04.12.2020 12:49:28
UweD
Hallo
der Blattbezug muss auch vor die Cells...
sumakt = WorksheetFunction.Sum(wksa.Range(wksa.Cells(1, 5), wksa.Cells(letzZeil, 5)))
LG UweD
Anzeige
AW: WorksheetFunction.Sum
04.12.2020 13:14:52
Jochen
Ihr Seit meine Retter vielen Dank.
Manchmal fehlt einem einfach die naheliegendste Idee.
:-))
Gruss Jochen
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Verwendung von WorksheetFunction.Sum in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  2. Code einfügen: Kopiere und füge den folgenden Code in das Modul ein:

    Sub vergl()
       Dim letzZeil As Long, wksi As Long
       Dim sumakt As Double, sum1 As Double, sum2 As Double
       Dim wks1 As Worksheet, wks2 As Worksheet, wksa As Worksheet
    
       wksi = ActiveSheet.Index
       Set wksa = ActiveSheet
       Set wks1 = Sheets(wksi - 12)
       Set wks2 = Sheets(wksi - 24)
       letzZeil = ActiveSheet.Cells(27, 5).End(xlUp).Row
    
       sumakt = Application.WorksheetFunction.Sum(wksa.Range(wksa.Cells(1, 5), wksa.Cells(letzZeil, 5)))
       sum1 = Application.WorksheetFunction.Sum(wks1.Range(wks1.Cells(1, 5), wks1.Cells(letzZeil, 5)))
       sum2 = Application.WorksheetFunction.Sum(wks2.Range(wks2.Cells(1, 5), wks2.Cells(letzZeil, 5)))
    
       ' Weitere Berechnungen und Bedingungen
    End Sub
  3. Code anpassen: Stelle sicher, dass die Indizes der Arbeitsblätter (wksi - 12 und wksi - 24) korrekt sind und dass die Zellen, die summiert werden sollen, im richtigen Bereich liegen.

  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um die Summen zu berechnen.


Häufige Fehler und Lösungen

  • Fehler 1004: Wenn du den Fehler "Anwendungs- oder objektorientierter Fehler" erhältst, stelle sicher, dass du die korrekten Bezüge zu den Zellen verwendest. Verwende beispielsweise wks1.Range(wks1.Cells(...)), um den Blattbezug korrekt zu setzen.

  • Fehlende Variableninitialisierung: Achte darauf, dass alle Variablen korrekt deklariert sind. Verwende Dim für die Variablen und weise ihnen Werte zu, bevor du sie verwendest.


Alternative Methoden

  • Direkte Verwendung von Application.Sum: Du kannst auch Application.Sum anstelle von WorksheetFunction.Sum verwenden, um die Summe zu berechnen. Dies kann in einigen Fällen einfacher sein:

    sumakt = Application.Sum(wksa.Range(wksa.Cells(1, 5), wksa.Cells(letzZeil, 5)))
  • Verwendung von SUMIF: Wenn du nur bestimmte Zellen summieren möchtest, basierend auf bestimmten Kriterien, kannst du WorksheetFunction.SumIf verwenden:

    sum1 = Application.WorksheetFunction.SumIf(wks1.Range("E:E"), "Kriterium", wks1.Range("F:F"))

Praktische Beispiele

  1. Summieren von Werten in einer bestimmten Spalte:

    sumakt = Application.WorksheetFunction.Sum(wksa.Range("E1:E" & letzZeil))
  2. Summenvergleich zwischen zwei Arbeitsblättern:

    If sumakt > sum1 Then
       ' Aktionen für den Fall, dass sumakt größer ist
    End If

Tipps für Profis

  • Verwende Option Explicit: Füge ganz oben in deinem Modul Option Explicit ein. Dies zwingt dich, alle Variablen zu deklarieren, was die Fehlersuche erleichtert.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um das Makro robuster zu gestalten:

    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    Fehlerbehandlung:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen WorksheetFunction.Sum und Application.Sum?
WorksheetFunction.Sum ist spezifisch für die Verwendung in VBA und ermöglicht die Verwendung von Excel-Funktionen im VBA-Code. Application.Sum ist einfacher und kann direkt auf Bereiche angewendet werden.

2. Kann ich die Summe für mehrere Bereiche gleichzeitig berechnen?
Ja, du kannst mehrere Bereiche mit Union kombinieren oder eine Array-Formel verwenden, aber achte darauf, dass dies in VBA etwas komplizierter sein kann.

3. Gibt es eine Möglichkeit, die Summe in einer bestimmten Zelle anzuzeigen?
Ja, du kannst den Wert der Summe einer Zelle zuweisen:

Cells(1, 1).Value = sumakt

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige