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

Forumthread: VBA Summewenn bringt Anwendungsfehler

VBA Summewenn bringt Anwendungsfehler
22.05.2024 17:36:58
der Bö
Moin zusammen,
ich möchte über VBA eine Summenformel in ein Tabellenblatt eintragen. Die Formel bezieht sich auf ein anderes Blatt und wenn ich die manuell eingebe, funktioniert
das auch. Aber per VBA bekomme ich "Anwendungs- oder objektorientierter Fehler".
Das Script sieht so aus (Auszug):

strFormel = _
"=SUM(('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!C2:C283))+" _
& "SUM(('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!D2:D283))+" _
& "SUM(('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!E2:E283))+" _
& "SUM(('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!F2:F283))+" _
& "SUM(('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!G2:G283))+"
Sheets("Zusammenfassung").Range("B2").Formula = strFormel

Ich möchte mir FormulaR1C1 ersparen, weil die Summenfelder im anderen Blatt sehr variabel sind! Die werden täglich neu reingeladen.
Und ich brauche die Formel mit anderen Kriterien in 7 Spalten...ist mir gerade zu viel Aufwand. Aber so klappt es auch nicht.
Die Zeilenangaben bekomme ich dann schon noch mit Variablen hin, das ist auch kein Problem.
Hat da jemand einen Tipp, was da falsch ist? Ich nutze O365 (Version 2308 Build 16731).
Danke und Grüße
Jürgen
Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 17:59:41
Oppawinni
Aber SUM ist doch nicht Summewenn, oder ?
mit SUMIF wird vielleicht ein Schuh draus.
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 20:08:06
daniel
Hi

Wenn das ganze international laufen soll, dann schreibe die Formel auf Englisch (.Formula) und mir R1C1-Zellbezügen.
Das ist auch die Schreibweise, die der Recorder aufzeichnet,dh. du entwickelst die Formel ganz normal in der Zelle und zeichnest die Eingabe einmal auf, dann hast du deinen Formeltext.

Hierbei sollte man sich angewöhnen, alle Bezüge, die nicht zwingend relativ sein müssen, absolut zu setzen, dann wird es viel übersichtlicher.

Der Vorteil von R1C1 ist, das die relativen Bezüge auch relativ beschrieben werden und daher nicht angepasst werden müssen, wenn die Formel in andere Zellen kommt. Wenn du den Wert aus der linken Nachbarzelle benötigst,dann ist das immer =RC[-1], egal ob die Formel in B1 oder in Z999 geschrieben wird.
Dh die meisten relativen Bezüge sind statischer Text, der nicht angepasst werden muss.

Nächster Tipp:
Schreibe die Formel zunächt in eine Stringvariable. Dabei ersetzt du was alle Zeilennummern, die variabel sein müssen, durch einen Dummy-Text, den du später austauscht

Also statt:
x = 99

Range("A1").Formula = "=Sum(B1:B" & x & ")"

Das hier
x = 99

fo = "=Sum(B1:Bxxx)"
fo = Replace(fo, "xxx", x)
Range("A1").Formula = fo

Bei komplexeren Formeln wie bei dir ist das um Welten übersichtlicher, als die ganzen Verkettungen, auch wenn ein paar Zeilen Code mehr sind

Und zum Schluss:
Lerne die neuen Funktionen von Excel 365.
Die Berechnung aus deinem Beispiel würde ich so machen:
=summe(filter('Mai 2024'!C2:G283;'Mai 2024'!J2:J283="Neu SFA";0))


Gruß Daniel

Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 18:23:21
der bö
Wenn ich eine passende Formel für SUMIF bekomme, die in VBA funktioniert, wäre mir das auch Recht.
Aber SUM geht ja...manuell! Nur nicht (bei mir) per VBA!
Ich hatte das vorher schon mit SUMIF probiert, hatte aber auch nicht geklappt. Und über diverse Suchen bekam ich SUM.

Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 18:24:28
BoskoBiati2
Hi,

da ist ein + zuviel in der letzten Zeile!

Da reicht das:

Sheets("Zusammenfassung").Range("B2").Formula "=SUM(('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!C2:C283),('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!D2:D283),('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!E2:E283),('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!F2:F283),('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!G2:G283))"


oder auch das:

Sheets("Zusammenfassung").Range("B2").Formula = "=SUMproduct(('Mai 2024'!J2:J283=""Neu SFA"")*('Mai 2024'!C2:G283))"
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 19:01:08
der Bö
@BoskoBiati2
Leider Nicht! Das hatte ich auch schon probiert. Keine Ahnung, was sich da wieder geändert hat in O365!
ABER...
das hier funktioniert:
dKennDatum = "Mai 2024"
iFirstLineD = 2
iLastLineD = 283
With Range("B" & iFirstLineD)
krit = "$B$1"
strFormel = "=SUMME(('" & dKennDatum & "'!J" & iFirstLineD & ":J" & iLastLineD & "=" & krit & ")*('" & dKennDatum & "'!C" & iFirstLineD & ":C" & iLastLineD & "))+" _
& "SUMME(('" & dKennDatum & "'!$J" & iFirstLineD & ":$J" & iLastLineD & "=" & krit & ")*('" & dKennDatum & "'!D" & iFirstLineD & ":D" & iLastLineD & "))+" _
& "SUMME(('" & dKennDatum & "'!$J" & iFirstLineD & ":$J" & iLastLineD & "=" & krit & ")*('" & dKennDatum & "'!E" & iFirstLineD & ":E" & iLastLineD & "))+" _
& "SUMME(('" & dKennDatum & "'!$J" & iFirstLineD & ":$J" & iLastLineD & "=" & krit & ")*('" & dKennDatum & "'!F" & iFirstLineD & ":F" & iLastLineD & "))+" _
& "SUMME(('" & dKennDatum & "'!$J" & iFirstLineD & ":$J" & iLastLineD & "=" & krit & ")*('" & dKennDatum & "'!G" & iFirstLineD & ":G" & iLastLineD & "))"
.Formula2Local = strFormel
End With

Wie gesagt, muss alles sehr dynamisch sein, weil die Daten täglich (oder wöchentlich) aus Access importiert werden und das dann auch sehr variable Anzahl Einträge sind.
Die Variablen bekomme ich alle raus, das ist kein Problem.
Ich frage mich nur, ob unsere polnische Kollegin dann auch noch das richtige Ergebnis sieht. ;)
Ist schon sehr seltsam, und ich kann mir auch nicht erklären, warum das bei mir nicht klappt.

Aber Danke für die Hilfe! :)
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 19:26:37
Oppawinni
Dann lies doch mal Range.("B2").Formula aus, den String solltest du nachbilden können....
Aber, ok, Hauptsache das läuft erst einmal...
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 19:30:33
BoskoBiati2
Hallo,

hier mal drei Varianten, die funktionieren:

https://www.herber.de/bbs/user/169647.xlsm

Also scheint der Fehler woanders zu liegen!
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 20:57:24
Oppawinni
Die funktionieren...... NICHT bei mir, also jedenfalls nur 1 von 3...
bekomme auch Anwendungsfehler... also gerade Summe krieg ich zwar als normale Formel rein, aber nicht als Matrixformel..
Kann ich dann zwar zu Fuß ändern, aber das ist ja nicht der Sinn der Sache..
Tsss...
(Excel 2016)
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 11:46:50
der Bö
Moin,
@BoskoBiati2
ich habe Deine Version jetzt übernommen und sie funktioniert! :)
strKrit = "$B$1"
Sheets("Zusammenfassung").Range("B" & iAktZeile).Formula = "=SUMPRODUCT(('" & dKennDatum & "'!J" & iFirstLineD & ":J" & iLastLineD & "=" & strKrit & ")*('" & dKennDatum & "'!G" & iFirstLineD & ":C" & iLastLineD & "))"

Warum das vorher nicht klappte... muss dann irgendwie an der Syntax liegen. Ist auch kürzer und besser zu lesen.

@Daniel, mit dem Filter Argument hatte ich bisher nicht gearbeitet. Die geht jetzt auch.

Also nochmal Danke an alle, die zur Lösung beigetragen haben.
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 22:13:34
BoskoBiati2
Hi,

bei mir gehts, Office 365, ohne Probleme.

AW: VBA Summewenn bringt Anwendungsfehler
22.05.2024 22:31:48
Oppawinni
2 von 3 hab ich hin bekommen aber diese lange Summe packt es nicht
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 07:01:24
BoskoBiati2
Hi,

hast Du zufällig @-Zeichen in der Formel? Die gehören da nicht hin.
Ansonsten wüsste ich nicht, wo das Problem liegen könnte.
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 07:09:38
Onur
Wie denn auch? Durch herumraten, weil die Datei nicht gepostet wurde ist es doch Glückssache.
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 10:04:37
Oppawinni
Wieso, ich hatte doch deine Datei.
Du hattest doch da kein @ drinn, oder?
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 09:45:58
BoskoBiati2
Hallo onur,

es gibt bereits eine Datei, und oppawinni ist nicht einmal der TE und hat auch kein 365. Also moser nicht.
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 11:29:12
Oppawinni
Damit ich das mit der Summe als Matrix-Formel in mein Excel 2016 rein kriege, muss ich
.FormulaArray = strFormel
verwenden.
Als normale Formel ging das problemlos mit
.Formula = strFormel
[ natürlich mit SUM() statt SUMME() ]
aber das bringt ja nicht das gewünschte Ergebnis.
Jetzt hatte ich in strFormel aber deutlich über 200 Zeichen und vermutet, dass es da ein Grenze gibt.
Ich hab dann im Makro das Worksheet "Mai 2024" am Anfang umbenannt in "M" , womit strFormel unter 200 (198) Zeichen kam, dann hat das funktioniert.
Anschließend hab ich dann das Blatt zurück umbenannt und es gab kein Problem.
Mit "Mo", also 208 Zeichen, funktioniert das schon nicht mehr, also dürfte da die Grenze bei 200 Zeichen liegen.
Warum das wieder so blöd gemacht ist, muss man auch nicht verstehen.
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 11:38:34
daniel
Hi
bei Array-Formeln ist die Grenze sehr knapp, in der Regel sind solche Grenzen immer 2er-Potenzen also wahrscheinlich 255 Zeichen.
die Übergabe von "normalen" Formeln von Excel nach VBA ist meines wissen nach auf c.a. 1000 Zeichen limitiert.
von Hand eingegebene Excelformeln können aber noch deutlich länger sein (bin mir nicht ganz sicher, aber ich meine c.a. 4000 Zeichen).
der Workaround, um Formeln die länger sind als 1000 Zeichen per VBA in die Zelle zu bekommen wäre folgender:
1. man schreibe die Formel als normalen Text in die Zelle, z.B. daruch, dass man vor das "=" eine eindeutige Zeichenfolge schreibt, z.B. .....Value = "xxx=Sum(...)"
2. man ersetzt mit Range(...).Replace "xxx", "", xlpart das "xxx" und Excel wird jetzt versuchen, den Text in eine Formel zu wandeln.
hierbei gelten dann bezüglich der Formellänge die Limits von Excel und nicht die von VBA.
damit die Wandlung in eine Formel per VBA klappt, muss die Formel in Englisch mit A1-Adressen geschrieben werden.

das gilt für Excelversionen vor 2022/365, mit den neuen habe ich mich diesbezüglich noch nicht beschäftigt.

Gruß Daniel
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 11:52:09
Oppawinni
Die Grenze kann aber nicht 256 oder 255 liegen, wenn es bei 208 Zeichen schon nicht klappt, oder?
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 12:15:12
daniel
so genau kenn ich die internas auch nicht.
bei mir auf Excel 365 steigt .FormulaArray bei 244 Zeichen Formellänge aus.

ich habs damit getestet:

Sub test()

Dim fo As String
Dim i As Long
For i = 200 To 300
fo = "=A1:A99&""x"""
fo = Replace(fo, "x", String(i, "x"))
Range("B1:B99").FormulaArray = fo
Next
End Sub


und geschaut, bei welcher Formelllänge der Fehlerabbruch kommt.
Gruß Daniel
Anzeige
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 12:47:37
Oppawinni
So ganz einfach scheint das auch nicht zu sein.
Bei dem "Test" kommt bei mir das Gleiche, also kein Unterschied bei Excel 365, auch ne Erkenntnis.
Die Ergebnisse variieren aber abhängig vom angegebenen Adressbereich... ich bin da gar bis 249 Zeichen gekommen.
Wer misst, misst Mist :0))
AW: VBA Summewenn bringt Anwendungsfehler
23.05.2024 13:20:42
Oppawinni
Ja, maximal, wie du aber selbst feststellst, geht das schon vorher in die Hose... mitunter eben sogar schon bei knapp über 208 Zeichen.
Was da die "kapazität" frisst, bleibt im Dunkeln.

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige