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

calculate und change

calculate und change
Jörg-HH
Hallo zusammen
wenn ich richtig verstanden habe, läuft bei einer Eingabe vor dem Change-Ereignis noch das _ Calculate-Ereignis ab. Ich möchte nun das Calculate unterdrücken, wenn in einem bestimmten Bereich etwas eingegeben wird. Das hatte ich mir so gedacht:

Private Sub Worksheet_Calculate()
Dim Target As Range
If Not Intersect(Target, Me.Range("KdVorgaben")) Is Nothing Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
End If
End Sub
Aber VBA hat eine andere Meinung und nennt das immer einen ungültigen ProzAufruf. Kann mir jemand sagen, was daran falsch ist?
Grüße - Jörg

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: calculate und change
02.02.2012 23:27:16
MatthiasG
Hallo Jörg,
leider hat Worksheet_Calculate() kein Target-Argument, du kannst es also auch nicht abfragen, selbst wenn du es mit Dim Target As Range deklarierst.
Gruß Matthias
hmm... schade :-( Danke! oT
02.02.2012 23:43:56
Jörg-HH
AW: evtl geht es doch.
03.02.2012 02:32:29
fcs
Halo Jörg,
du kannst über die Zellselektion den Berechnungsmodus umschalten.
Wenn eine Zelle im Bereich selektiert wird, dann Berechnen auf manual setzen, außerhalb auf automatisch.
Gruß
Franz
  'Code im Tabellenmodul
Private Sub Worksheet_Calculate()
MsgBox "I am Worksheets_Calculation"  'Testzeile
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Me.Range("KdVorgaben")) Is Nothing Then
Application.Calculation = xlCalculationAutomatic
Else
Application.Calculation = xlCalculationManual
End If
End Sub

Anzeige
Das ist auch die einzige Möglichkeit, aber ...
03.02.2012 04:20:29
Luc:-?
…wenn wieder zurückgeschaltet wird, wdn doch alle Änderungen neu berechnet, Franz & Jörg!
Das Calculate-Ereignis wird übrigens erst ausgelöst, wenn sämtliche Berechnungen durch sind. Deshalb kann es da auch kein Target geben → wäre sinnlos. Ein Eintrag eines Target als Prozedur-Parameter dürfte zu einem Fehler führen, weil VBA das nicht als originär anerkennt,; evtl ignoriert es VBA hier aber auch, weil kein Parameter vorgesehen ist.
Gruß Luc :-?
AW: Das ist auch die einzige Möglichkeit, aber ...
03.02.2012 09:29:52
fcs
Hallo Luc, hallo Jörg,
man könnte den Ablauf auch steuern, indem man eine Private- oder Public-Variable mit mit Daten füllt, die in der Calculate-Ereignisprozedur geprüft wird. Bei bestimmten Werten wird die Ereignisprozedur sofort wieder verlassen.
Das Problem ist hier, wie schon bei meinem Vorschlag, ein passendes Ereignis zu wählen um die Berechnung wieder zu starten. Der konsequenteste Weg ist hier das bewußte Freischalten z.B. per Buttonklick, dann könnte man ggf. sogar die Ereignismakros vorübergehend abschalten.
Über die Zwischenvariable könnte man auch die Target-Variable der Worksheet_Selection-Ereignis-Prozedur verarbeiten. Aber das zurücksetzen der Variablen muss halt irgendwie geregelt werden.
Gruß
Franz
Beispiel:
'Code in Tabellenblatt-Modul
Option Explicit
Private rngEingabe As Range
Private Sub CommandButton1_Click()
'Aktiviert Berechnung und Ereignisse wieder
Reset_Calculation
End Sub
Private Sub Worksheet_Calculate()
If Not rngEingabe Is Nothing Then Exit Sub
MsgBox "Calculate-Ereignis wird abgearbeitet"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If rngEingabe Is Nothing _
And Not Intersect(Target, Me.Range("KdVorgaben")) Is Nothing Then
'Application.EnableEvents = False
Set rngEingabe = Target
Application.Calculation = xlCalculationManual
End If
If Target.Address = "$B$3" Then
'Eingabe beenden durch Selektion der Zelle B3 - funktioniert nur wenn Ereignsmakros _
nicht deaktiviert werden
Reset_Calculation
End If
End Sub
'Dieses Makro z.B per Schaltfläche oder mit Selektion einer _
bestimmten Zelle starten
Sub Reset_Calculation()
'Application.EnableEvents = True
Set rngEingabe = Nothing
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige