Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1252to1256
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

was löst WS_Calculate aus?

was löst WS_Calculate aus?
Jörg-HH
Hallo zusammen
ich dachte immer, Calculate wird nur ausgelöst, wenn was gerechnet wird...
Hab einen Code, der bei der Auswahl eines bestimmten Wertes in einem Gültigkeitsdropdown
- erst Calculate macht
- dann in die WS_Change hüpft, dort ein paar Zeilen Hidden=True macht, ansonsten nur noch von Elseif zu Elseif hüpft und dann die Change verläßt
- aber am Schluß nochmal in die Calculate springt.
Das erste Calculate versteh ich ja. Aber warum geschieht das am Ende nochmal - obwohl es doch nix mehr zu rechnen gibt...?
Grüße - Jörg

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: was löst WS_Calculate aus?
10.03.2012 17:18:06
fcs
Hallo Jörg,
das Ein-/Ausblenden von kann durchaus die Neuberechnung von Formeln auslösen. z.B. bei SUMME oder TEILERGEBNIS, wenn die ein-/ausgeblendeten Zeilen in den zu summierenden Bereichen liegen.
Wenn man die Ausführung von Ereignismakros während einer Makroausführung verhindern möchte, dann muss man die Ereignismakros vorübergend deaktivieren.
Gruß
Franz
Beispiel:
Private Sub Worksheet_Change(ByVal Target As Range)
With Application
.EnableEvents = False
End With
Select Case Range("B2")
Case 3
Rows(3).Hidden = False
Rows(4).Hidden = True
Case 4
Rows(4).Hidden = False
Rows(3).Hidden = True
End Select
With Application
.EnableEvents = True
End With
End Sub

Anzeige
AW: was löst WS_Calculate aus?
10.03.2012 17:43:30
Jörg-HH
Hallo Franz
das EnableEvents = False hab ich am Anfang der Change schon untergebracht. Aber die Calculate-Sub wird ja durchlaufen, bevor die Change überhaupt erreicht ist - also nützt mir ein Events=false innerhalb der Change ja nichts.
Aber mir fällt grad was Anderes auf:
Ich habe mal bei der WS-calculate von Tabelle93 einen Haltepunkt gesetzt und in Tabelle31 eine Eingabe gemacht - da stoppt der Code bei dem Haltepunkt der Tabelle93. - Offenbar wird bei einer Eingabe nicht nur die Calculate des betr Blattes angestoßen, sondern alle anderen auch.
Wieso ist das so, und wie kann man das abstellen (Außer Berechnung auf manuell umschalten -was ich vermutlich nicht gebrauchen kann)?
Jörg
Anzeige
AW: was löst WS_Calculate aus?
10.03.2012 20:07:36
fcs
Hallo Gert,
Wieso ist das so,
Da schreibe ich dann oft: Weil es die Programmierer bei Microsoft so wollen. ;-)
und wie kann man das abstellen?
Irgendwie verhedderst du dich scheinbar gerade in mehreren Ereignismakros, die sich gegenseitig beeinflussen/auslösen, aber zu deinem Glück noch nicht in einer Endlosschleife enden.
Was für Aktionen willst du im Tabellenblatt denn ausführen, wenn Excel eine Neuberechnung durchgeführt hat?
In Grenzen kann man mit VBA-projektweit deklarierten Variablen bestimmte Abläufe in die gewünschte Richtung zwingen.
In einem allgemeinen Modul wird die Variable als Public deklariert. Wenn bestimmte anderes Prozeduren sofort wieder verlassen werden sollen, dann wird diese Variable vorübergehend auf True gesetzt. in den anderen Prozeduren wird dieser Wert geprüft.
Gruß
Franz
Beispiel:
'Code in einem allgemeinen Modul
Public boolTest As Boolean
'Code unter einem Tabellenblatt
Private Sub Worksheet_Calculate()
Dim StatusCalc As Long
If boolTest = True Then Exit Sub
MsgBox "Blatt wurde eben berechnet"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
boolTest = True
Select Case Range("B2")
Case 3
Rows(3).Hidden = False
Rows(4).Hidden = True
Case 4
Rows(4).Hidden = False
Rows(3).Hidden = True
End Select
boolTest = False
End Sub

Anzeige
AW: was löst WS_Calculate aus?
10.03.2012 22:46:59
Jörg-HH
hmm... die Datei hat ca. 130 Blätter. Wenn ich in Blatt x nur eine Eingabe mache, werden erstmal 130 Calculate-Subs angeschoben und wieder verlassen, bevor ich überhaupt in der Change des Blattes x lande.
Das dauert so lange, daß man es merkt. Kann man nicht der Datei sagen, daß sie gefälligst nur in dem Blatt kalkulieren soll, wo was passiert?
Ich hab das grad mal mit ner Dummy nachgebaut, 3 Blätter, in allen =jetzt(). Für alle eine Change und eine Calculate, und an allen Subs Haltepunkte.
Wenn ich in Blatt 2 oder 3 was eingebe, lande ich zunächst in den Calculates aller Blättern, dann erst in der Change des aktuellen Blattes, und dann fertig.
Das versteh ich nich... :-(
Jörg
Anzeige
sheets("xy").EnableCalculation=false
10.03.2012 23:11:42
ransi
HAllo Gerd
Kann man nicht der Datei sagen, daß sie gefälligst nur in dem Blatt kalkulieren soll, wo was passiert?
Jau, das geht:
Für jedes Sheet die EnableCalculation-Eigenschaft auf false setzen.
Nur wenn tatsächlich etwas berechnet werden soll in dem jeweiligen Blatt wieder auf true.
Nicht verwechseln mit Application.Calculation.
ransi
AW: sheets("xy").EnableCalculation=false
12.03.2012 14:55:55
Jörg-HH
ok, danke, Jungs
werd mit euren Hinweisen mal weiter tüfteln.
Grüße - Jörg
wie kommt ihr übrigens beide auf Gerd/t? Das hat was mit Gerhard, dem germanischen Speerwerfer/-träger zu tun, aber ich fühl mich als verkürztem Georg, dem griechischen Landmann/Bauern, wohler. Isn bißchen friedlicher :-)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige