Problem im VBA-Makro mit Summenprodukt-Formel
Hallo Forum,
ich komme mit diesem Problem einfach nicht weiter, kann mir jemand helfen.
Sub versuch()
Worksheets("test").Select
ActiveSheet.Unprotect
For Zeile = 12 To 13
For Spalte = 3 To 20
Sheets("test").Cells(Zeile, Spalte).FormulaLocal = _
"=SUMMENPRODUKT(([t1nummer]=Cells(Zeile, 1))*([t1datum1]<=Cells(9, Spalte))*([t1datum2]>=Cells(9, Spalte)))"
Next Spalte
Next Zeile
End Sub
t1nummer, t1datum1 und t1datum2 sind
Namen für definierte Bereiche in einem anderen Tabellenblatt. Diese Bereiche möchte ich mit den jeweiligen Zellinhalten (indiziert durch die Schleifenzähler) im aktiven Tabellenblatt vergleichen. Bei Übereinstimmung sollte mir die Formel den Wert 1 zurückgeben. Klappt aber nicht! Ich bekomme 'Laufzeitfehler '1004' Anwendungs- oder objektorientierter Fehler' angezeigt.
Danke für jede Hilfe
Lothar
Antwort schreiben
Antwort 1 von rainberg vom 27.07.2019, 08:34 Options
Hallo Lothar,
schön wäre es, wenn Du ein Testobjekt, was der Tabellenstruktur der Originaldatei entspricht hochladen könntest. Die Daten kannst Du ja verfälschen.
Den Upload kannst Du über folgende Adresse tätigen.
http://www.netupload.de/Gruß
Rainer
Antwort 2 von lothar48 vom 28.07.2019, 00:12 Options
@Rainer,
ich habe mein Arbeitsblatt mal vereinfacht abgebildet. Bekomme jetzt allerdings einen Syntaxfehler im Makro angezeigt und finde den Fehler nicht - im Moment muß ich passen!
Das Summenprodukt soll den Wert 1 oder bei Datumsüberschneidungen den Wert 2 zurückgeben. Der Zeitraum zwischen datum1 und datum2 in den Tabellen 1 und 2 soll in Tabelle 3 durch "Bedingte Formatierung" als Farbbalken dargestellt werden.
Als Formel im Tabellenblatt funktioniert das wie gewünscht!
Gruss Lothar
hier ist das Arbeitsblatt
Antwort 4 von lothar48 vom 29.07.2019, 10:22 Options
@Rainer,
danke für die Hilfe! Ich habe allerdings wieder dasselbe Problem, welches mich veranlasst hat, die Summenprodukt-Formel in ein Makro zu packen und nicht als Tabellenfunktion zu nutzen. Das Makro macht ja nichts anders als
die Formel in die jeweiligen Zellen der Tabelle zu schreiben. Das hatte ich (mangels VBA Erfahrung) nicht erwartet!
Die Tabelle 3 meines Beispiels besteht tatsächlilch aus 100 Datumsspalten und 400 Zeilen mit lfd. Nr. und ist verknüpft mit 14 Tabellenblättern. Wenn ich in irgendeiner dieser Tabellen Daten ändere oder neu eingebe, berechnet Excel bei jeder Eingabe das Summenprodukt für alle Zellen der Tabelle 3 immer wieder neu! Das dauert dann jeweils ca. 1,5 Minuten. Ein effektives Arbeiten ist so nicht möglich!
Was ich erreichen möchte ist, dass das Ergebnis der vorhergehenden Berechnung in Tabelle 3 immer sichtbar ist und eine Neuberechnung nur durchgeführt wird, wenn der Aktualisierungs-Button gedrückt wird!
>EXTRAS /OPTIONEN / BERECHNUNG / manuell< kann ich nicht nutzen, da noch anderer Bezüge zwischen den Tabellenblättern bestehen die auf jeden Fall automatisch aktualisiert werden müssen.
Sorry, ich hatte mein Problem nicht detailliert genug beschrieben!
Gruss Lothar
Antwort 5 von rainberg vom 29.07.2019, 17:08 Options
Hallo Lothar,
ich war schon versucht , Dir vorzuschlagen, anstatt der SUMMENPRODUKT-Formel , die "WorksheetFunction.SumProduct()" zu verwenden.
Damit würde nicht die Formel in die betreffenden Zellen geschrieben, sondern nur die Ergebniswerte, womit das ständige Neuberechnen wegfällt.
Aber da Du 14 Tabellen einbinden willst, würde das ja 42 definierte Namen bedeuten.
Diese zu erstellen, wäre ja nicht das Problem, aber wohl diese in der SumProduct-Funktion unter zu bringen.
Ich kenne zwar die zulässige Länge einer Formel in VBA nicht, aber ich vermute stark, dass es zu einer Überschreitung kommt.
Da es Schöneres gibt, als das zu testen, zumal ich kein VBA-Fachmann bin, kann ich Dir diesbezüglich leider nicht weiter helfen.
Gruß
Rainer
Antwort 6 von Beverly vom 29.07.2019, 17:26 Options
Hi Lothar,
du darfs keinen Zeilenumbruch innerhalb einer mathematischen Operation machen. Wenn du die Zeilenumbrüche wegnimmst, erscheint kein Fehler.
Bis später,
Karin
Antwort 7 von lothar48 vom 17.10.2019, 12:51 Options
Hallo Rainer,
ich weiß zwar nicht, ob dieser Thread hier noch verfolgt wird, da er schon etwas älter ist. Ich poste trotzdem zunächst einmal hier, in der Hoffnung, dass Du mir nochmals helfen kannst.
Mein Performance-Problem habe ich gelöst, indem ich das Excel-File mittels Makro unter anderem Namen speichere, alle Tabellenblätter, bis auf das relevante, ausblende, die Summenproduktformel einmal ausführe und ich habe das gewünschte Ergebnis! Mit dem Ursprungstabellenblatt kann ich normal weiterarbeiten!
Nun habe ich das Problem, dass ich den Farbbalken evtl. in einer anderen Farbe darstellen muß, nämlich immer dann, wenn in der Spalte "Merkmal" ein Wert steht (E oder A), soll der Balken nicht in blau sondern in grün dargestellt werden. Die Summenproduktformel müßte also in diesen Fällen einen anderen Wert als 1 liefern, dann könnte ich die Farbe über die "Bedingte Formatierung" steuern. Ich bekomm's alleine nicht hin, wäre nett, wenn Du mir nochmals helfen würdest.
Eine Beispieldatei habe ich hochgeladen. Gruss Lothar
Antwort 9 von lothar48 vom 17.10.2019, 13:46 Options
Hallo Helmut,
nein, so meinte ich das nicht!
Die mit der grünen Umrandung gekennzeichneten Zellen, die jetzt blau sind, sollen grün dargestellt werden, weil in der Spalte "Merkmal" E oder A steht! Steht unter "Merkmal " nichts, dann sollen sie blau dargestellt werden!
Gruss Lothar
Antwort 11 von lothar48 vom 17.10.2019, 14:33 Options
Nein, so auch nicht!
Das ganze Problem ist etwas komplizierter!
Wenn Du Dir den ganzen Thread durchliest, weist Du worum es geht!
Die Lösung liegt wohl nur in einer Änderung des VBA-Makros, welches die Summenprodukt-Formel ausführt.
Gruss Lothar
Antwort 12 von Saarbauer vom 17.10.2019, 14:52 Options
Hallo,
auf ein neues. Wenn du dein Formel so ergänzt
=SUMMENPRODUKT(((t1nummer=$A3)*(t1datum1<=C$1)*(t1datum2>=C$1))+((t2nummer=$A3)*(t2datum1<=C$1)*(t2datum2>=C$1)))*WENN(ODER($T3="E";$T3="A");10;1)
Dann kommt anstelle von 1 oder 2, 10 oder 20 und jetzt bei der Bedingten Formatierung die dritte Bedingung auf => 10 setzen
Gruß
Helmut
Antwort 13 von lothar48 vom 17.10.2019, 19:21 Options
Hallo Helmut,
ich habe versucht Deinen Lösungsvorschlag [/url=http://www.netupload.de/detail.php?img=cca77fc9a9400cafe88863ce68d7b12e.xls]
hier[/url] umzusetzen.
Ich bekomme allerdings bei der Ausführung des Makros
"Laufzeitfehler 1004 - Anwendungs- oder objektdefinierter Fehler" angezeigt!
Ohne Hilfe komme ich hier nicht weiter, irgendeine Idee?
Gruss Lothar
Antwort 15 von lothar48 vom 17.10.2019, 19:46 Options
Hast Du evtl. nicht die richtige Datei hochgeladen?
Wenn ja, wo hat sich was geändert?
Gruss Lothar
Antwort 16 von Saarbauer vom 17.10.2019, 19:54 Options
Hallo,
seh mal in den grünen Feldern mit der 10 nach, geändert in allen Feldern und die bedingte Formatierung
Setze an anderer Stelle mal das E.
Ich habe an alle Zellen *WENN(ODER($T3="E";$T3="A");10;1)
Gruß
Helmut
Antwort 18 von lothar48 vom 17.10.2019, 21:38 Options
@Rainer
n'abend Rainer, schön das Du hier mitliest!
@Helmut
Ok, hab's gesehen, da ist mir bei der Erstbeschreibung meines Problems ein Fehler unterlaufen, T'schuldigung!
Schaut Euch doch bitte nochmal
diese Datei an.
Das Merkmal, welches abgefragt werden soll, ist in den Tabellen 1 und 2 und nicht in Tabelle3 definiert.
Das VBA-Makro "berechnen" schreibt die Funktion >Summenprodukt< in den Zellbereich C3:S10, diese Funktion ermittelt den Wert 1 oder 2 je Zelle (Darstellung in blau oder rot durch "Bedingte Formatierung"). Das funktioniert auch. Was jetzt neu hinzugekommen ist, ist das Merkmal welches maßgebend dafür ist, ob die Zelle in grün dargestellt werden soll. Das Summenprodukt müßte also um eine Bedingung erweitert werden. Das habe ich versucht, erhalte aber den benannten Fehler.
Die Werte A und E in den Zellen T2 und U2 der Tabelle3 habe ich angegeben, weil die Abfrage auf ="A" bzw. = "E" in der Summenprodukt-Funktion einen Syntaxfehler erzeugt hat. Ich vermute das hängt mit der R1C1-Darstellung zusammen.
Gruss Lothar
Antwort 19 von rainberg vom 18.10.2019, 08:41 Options
Hallo Lothar,
so wie Du das machen wolltest geht das nicht, das widerspricht der Syntax von SUMMENPRODUKT.
Um die Formel nicht weiter zu komplizieren habe ich eine Hilfspalte eingefügt und deren Daten für die Bedingte Formatierung verwendet.
Die Formeln der Hilfsspalte werden ebenfalls durch das Makro aktualisiert.
http://www.netupload.de/detail.php?img=af5dfbdc66f7cfb402de6b92e4ac...Gruß
Rainer