Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1904to1908
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code nur ausführen bei öffnen

Code nur ausführen bei öffnen
16.11.2022 16:48:41
Simon
Hallo,
Ich habe im Internet einen Code für eine VBA Formel gefunden, die mir die Werte von eingefärbten Zellen zusammenzählt (eig. komisch, dass es sowas nicht direkt von Excel gibt... oder gibt es das?). Dieser Code befindet sich in einem Modul und funktioniert auch. Ich kenne mich mit Modulen nicht aus - mein restlicher code ist immer in den Tabellenblättern selbst - aber ich habe den Eindruck, dass die Formel ständig aktualisiert wird und daher meine Tabelle erheblich langsamer funktioniert als vorher.
Kann man irgendwie erreichen, dass die Formel nur aktualisiert wird, wenn ich das Tabellenblatt, in dem sie sich befindet, aktiviere? (Vll. wichtig: Die eigentlichen Werte, die addiert werden befinden sich in einem anderen Tabellenblatt)
Ich habe einen Code, der leere Spalten in einem Tabellenblatt ausblendet, sobald dieses aktiviert wird. Das klappt auch. Aber ich schaffe es nicht, den hier unten angehängten Code unter dieselbe Bedingung zu setzen. Geht das? Oder hat jemand eine andere Idee, wie ich die Werte eingefärbter Zellen zählen kann.

Option Explicit
Function HintergrundFarbeSummieren(Farbe As Range, Summenbereich As Range)
Application.Volatile True
Dim zelle As Range
Dim ZFarbe As Long
ZFarbe = Farbe.Cells(1, 1).Interior.ColorIndex
For Each zelle In Summenbereich
If zelle.Interior.ColorIndex = ZFarbe Then
HintergrundFarbeSummieren = HintergrundFarbeSummieren + zelle.Value
End If
Next
End Function
Vielen Dank und Grüße
Simon

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code nur ausführen bei öffnen
16.11.2022 17:45:52
Oberschlumpf
Hi Simon,
"...eig. komisch, dass es sowas nicht direkt von Excel gibt..."
Wenn du das komisch findest, dann MUSST du in Excel doch eigentlich ALLES kennen, was es gibt - denn nur dann kann man doch etwas komisch beurteilen, oder?!?
Ruf deine gezeigte Funktion - nur im - Worksheet_Activate-Ereignis des Tabellenblatts auf, bei dessen Anzeige die Funktion gestartet werden soll.
Was die Ablaufgeschwindigkeit eines Makros betrifft, ist es egal, ob der Code in den Blatt-Modulen oder im allgemeinen Modul steht.
Ich z Bsp mach alles genau umgekehrt:
- so gut es geht, versuch ich alles an Code ins allgemeine Modul zu schreiben
- nur der Code, der nur im jeweiligen Blattmodul lauffähig ist, schreib ich auch da rein
Ciao
Thorsten
Anzeige
AW: Code nur ausführen bei öffnen
16.11.2022 17:57:31
Simon
Hallo Thorsten,
wie beschrieben, habe ich den Code im Internet gefunden. Ich bin davon ausgegangen, dass eine Quelle, die so einen Code erstellen kann und darüber postet, den einfachsten Weg geht. Meines Erachtens kann man daher sehr wohl vermuten!, dass eine andere Möglichkeit in Excel nicht gibt. Alles kenne ich natürlich nicht. Wahrscheinlich nicht mal einen Bruchteil. Daher habe ich ja auch gefragt, ob es eine bessere Möglichkeit gibt...
Den Function-Code in das Worksheet_Activate-Ereignis zu schreiben, habe ich bereits versucht. Leider klappt es bei mir nicht, wenn ich das so mache:

Option Explicit
Private Sub Worksheet_Activate()
Function HintergrundFarbeSummieren(Farbe As Range, Summenbereich As Range)
Application.Volatile True
Dim zelle As Range
Dim ZFarbe As Long
ZFarbe = Farbe.Cells(1, 1).Interior.ColorIndex
For Each zelle In Summenbereich
If zelle.Interior.ColorIndex = ZFarbe Then
HintergrundFarbeSummieren = HintergrundFarbeSummieren + zelle.Value
End If
Next
End Function
End Sub
Hier ersetzt Excel "End Sub" einfach immer durch ein zweites "End Function". Hast du vll. einen Tipp, wie ich das machen kann?
Gruß Simon
Anzeige
AW: Code nur ausführen bei öffnen
16.11.2022 17:59:27
Oberschlumpf
Hi,
zeig bitte mal ne Bsp-Datei per Upload.
Ciao
Thorsten
AW: Code nur ausführen bei öffnen
16.11.2022 18:07:54
Simon
https://www.herber.de/bbs/user/156217.xlsm
Der code ist im Modul und funktioniert. sobald er im Tabellenblatt steht funktioniert er überhaupt nicht. Davon abgesehen gibt es zusätzlich auch das Problem mit End Sub
AW: Code nur ausführen bei öffnen
17.11.2022 09:01:08
Oberschlumpf
Hi Simon,
sorry, hatte gestern keine Zeit mehr - aber jetzt leider noch immer Fragen :-/
a) du schreibst, die Formeln sollen sich nur aktualisieren, wenn ein bestimmtes Tabellenblatt aktiviert wird
wieso zeigst du dann eine Bsp-Datei mit nur einem Tabellenblatt?
b) du schreibst: "...(Vll. wichtig: Die eigentlichen Werte, die addiert werden befinden sich in einem anderen Tabellenblatt)..."
wieso gibt es dann nicht - das andere Tabellenblatt - in dem die Werte stehen, die du in den Formeln berechnen willst?
So, wie sich deine Datei jetzt zeigt, würd ich die Berechnungen direkt im Code vornehmen (anstelle von Function würd ich eine Sub schreiben) und eben nur die Ergebnisse in den Zellen anzeigen.
Ciao
Thorsten
Anzeige
AW: Code nur ausführen bei öffnen
17.11.2022 13:51:16
Simon
Hi Thorsten,
in dem Fall diente das einfach der Vereinfachung. Ob die Werte jetzt aus einem anderen Tabellenblatt kommen oder nicht, ist eigentlich egal. Wie auch immer, es hat sich inzwischen erledigt. Ich lasse das Feature einfach weg. Danke für deine Hilfe.
Gruß Simon
AW: Code nur ausführen bei öffnen
16.11.2022 18:07:29
Daniel
Hi
1. lösche das Application.Volatile
2. füge der Formel einen weiteren Parameter hinzu, dies sollte eine Zelle sein:

Function HintergrundFarbeSummieren(Farbe As Range, Summenbereich As Range, xxx as Range)
3. gib dann in den Formeln als dritten Parameter eine Zelle an, möglichst immer die gleiche:

=HintergrundFarbeSummieren(Zelle mit Farbe, Zellen die summiert werden sollen, $A$1)
4. immer, wenn du Formeln aktualisiert werden müssen (z.B. wenn du das Blatt aktiviest), änderst du einfach den Wert in dieser Zelle. Damit löst du dann die Neuberechnung der Formeln aus, die auf diese Zellen referenzieren.
Gruß Daniel
Anzeige
AW: Code nur ausführen bei öffnen
16.11.2022 19:24:00
Simon
Hallo Daniel,
erstmal vielen Dank für deine Antwort. Grundsätzlich verstehe ich deine Idee, aber sie kann glaube ich nicht ganz das umsetzen, was ich will. Ich habe alles so eingegeben, wie du beschrieben hast. Wenn ich den Wert in der Zelle verändere, die ich als zusätzliche Variable eingegeben habe, stockt mein Excel kurz. Es scheint also die Formeln zu aktualisieren. Allerdings aktualisieren sich die Formeln auch noch in anderen Fällen. Kann man es so einrichten, dass sich die Formeln wirklich nur dann aktualisieren, wenn ich ein bestimmtes Tabellenblatt aktualisiere?
Hintergrund ist folgender: Ich habe eine Userform, deren Einträge ich per Knopfdruck zu den Einträgen in meiner Tabelle hinzufüge. Und das auch in dem Bereich, der auf gefärbte Zellen überprüft wird. Dadurch wird das automatische Eintragen allerdings erheblich langsamer. Was vorher 3 Sek. gedauert hat, braucht jetzt fast 10. Ich finde schon 3 Sek recht lange, aber das liegt wohl an den ganzen Tabellenblättern in meiner Arbeitsmappe. Ich habe die Hoffnung, dass es schneller geht, wenn die Formeln nur überprüfen, ob eine Zelle eine bestimmte Farbe hat, wenn ich das Tabellenblatt mit der Übersicht aktiviere...
Vielleicht hast du ja noch eine Idee, sonst verzichte ich auf das Feature.
Gruß Simon
Anzeige
Nehme den "Application.Volatile True" weg owT
17.11.2022 12:48:28
Yal
AW: Nehme den "Application.Volatile True" weg owT
17.11.2022 12:50:10
Daniel
das war punkt 1 auf meiner Anweisung.
Gruß Daniel
Sorry, lesefaul. Gelobe Verbesserung ;-)
17.11.2022 12:59:14
Yal
... ich vermute, Simon hat es auch überlesen.
VG
Yal
AW: Sorry, lesefaul. Gelobe Verbesserung ;-)
17.11.2022 13:09:05
Daniel
manchen muss man halt manche Dinge mehrfach wiederholen, bis sie sie verstehen.
Wobei ein Forum die Möglichkeit bieten würde, dass man das selber machen kann, ohne von anderen darauf aufmerksam gemacht zu werden.
AW: Nehme den "Application.Volatile True" weg owT
17.11.2022 13:11:33
Simon
Hi,
das habe ich so gemacht. Vielleicht reden wir auch ein wenig aneinander vorbei. Ich habe die Datei angehängt. Ich meine mit "wenn sich das Tabellenblatt aktualisiert", dass ich von einem zweiten Tabellenblatt auf das ursprüngliche Tabellenblatt zurückgehe. Also auf das Tabellenblatt unten in der Leiste klicke. So wie es mit den von dir vorgeschlagenen Anpassungen funktioniert, aktualisiert es sich aber auch, wenn ich nur eine Zahl verändere in einer gefärbten Zelle. Oder ich verstehe nicht, was ihr von mir wollt. Kann gut sein...
https://www.herber.de/bbs/user/156233.xlsm (kann sein, dass man noch ein zweites Tabellenblatt erstellen muss)
Gruß Simon
Anzeige
AW: Nehme den "Application.Volatile True" weg owT
17.11.2022 13:33:09
Daniel
ich hatte dir doch geschrieben, dass Formeln immer dann neu berechnet werden, wenn sich ein Zellwert in einer Zelle, die von der Formel verwendet wird, ändert.
sobald du also eine Zellwert in diesen Zellen $E$12;A12:C19;$A$1 änderst, wird die Formel =HintergrundFarbeSummieren($E$12;A12:C19;$A$1) neu berechnet.
enthält der Code der Funktion Hintergrundfarbesummieren die Anweisung "Application.Volatile", wird die Formel neu berechnet, sobald sich irgendein Zellwert irgendwo in Excel ändert.
Neuberechnungen dieser Formel können auch beim Filtern, Sortieren oder ausblenden von Zeilen stattfinden.
Das ändern eines Formats löst in Excel keine neuberechnung der Formeln aus.
Matrixformelabschluss ist für diese Formel nicht erforderlich.
das ist im prinzip alles, was ich dazu zu sagen habe.
Gruß Daniel
Anzeige
AW: Nehme den "Application.Volatile True" weg owT
17.11.2022 13:49:17
Simon
Hi Daniel,
ich hatte gedacht, dass man das auch so lösen kann, dass es sich nur aktualisiert, wenn man das Tabellenblatt anklickt. Also nicht, wenn man die Werte ändert. So wie es jetzt ist, verlangsamt es die Tabelle derart, dass ich das Feature lieber rauslasse. Aber danke für deine - und eure - Geduld mit mir!
Einen schönen Tag noch!
Simon

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige