Herbers Excel-Forum - das Archiv

Ereignisprozedur

Bild

Betrifft: Ereignisprozedur
von: Peter F.

Geschrieben am: 31.07.2008 14:44:44

Hallo Excel-Fans,
ich hoffe, dass an diesem heißen Donnerstag Nachmittag wenigsten ein Experte online ist, der mir helfen kann:
Ich habe eine Arbeitsmappe mit 2 Arbeitsblättern (tab1 & tab2).
In Sheets("tab1").Range("D21") habe ich eine Formel, die per Sverweis aus einer Tabelle in Sheets("tab2") einen Wert extrahiert. Dieser Originalwert in tab2 muss gelegentlich aktualisiert werden.
Das habe ich mir wie folgt vorgestellt :
1. Ich überschreibe die Formel in Sheets("tab1").Range("D21") mit dem neuen Wert.
2. Dieser wird per VBA-Code ( in die richtige Zelle in Sheets("tab2") eingefügt.
3. Dann wird die Formel in Sheets("tab1").Range("D21") wieder hergestellt.
Den Code für Schritt 2 & 3 habe ich. Damit aber nicht vergessen wird das Makro dafür auszuführen (nicht jeder sieht dem Zellinhalt gleich an, dass er nicht aus einer Formel resultiert), möchte ich dessen Start mit der Eingabe des neuen Wertes in Sheets("tab1").Range("D21") verbinden.
Dafür sollte es eine Ereignisprozedur geben : Private Sub Worksheet_Change......., aber ich weiß nicht
wie die in diesem Fall auszusehen hat.
Einer da draußen weiß das bestimmt !
Ich bitte um Euren Beistand!
Danke,
Peter

Bild

Betrifft: AW: Ereignisprozedur
von: Holger

Geschrieben am: 31.07.2008 15:30:49
Hallo Peter,
die Prozedur musst du in den Codeteile der Tabelle und nicht in ein Modul schreiben.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("d21")) Is Nothing Then
deine Anweisungen
end if
End Sub


Gruß
Holger

Bild

Betrifft: AW: Ereignisprozedur
von: Peter F.

Geschrieben am: 31.07.2008 17:00:47
Hallo Holger,
danke für den Code, der im Prinzip funktioniert. Ein Problem hat sich aber jetzt neu ergeben: Während die Ausführung meiner eingefügten Anweisung "von Hand" ausgelöst noch nicht einmal 1 sec. dauert,
so braucht es, in die Ereignisprozedur eingefügt ca. 20 sec.
Das Ergebnis ist eigentlich sehr schnell zu sehen, d.h., der aktualisierte Wert wird über die wiederhergestellte Formel angezeigt. Aber Excel rechnet noch lange weiter ( am unteren Rand des Blattes wird angezeigt (20 sec. lang) : Berechnete Zellen 100%.
Ich muss vielleicht noch anmerken, dass die Arbeitsmappe fast 7 MB groß ist.
Kann man noch etwas zu Beschleunigung tun ?
Gruß,
Peter.

Bild

Betrifft: AW: Ereignisprozedur
von: Peter F.

Geschrieben am: 31.07.2008 17:26:23
Hallo Holger,
noch eine Anmerkung :
Wenn ich die Ausführung des Codes mit der Ereignisprozedur per [ESC] sofort unterbreche und dann mit "Beenden" aus VBA nach Excel wechsele, dann ist der neue Wert über die Formel fertig dargestellt.
Könnte man das , ich meine ESC o Ä. evtl. in den Code einfügen ?
Gruß,
Peter.

Bild

Betrifft: AW: Ereignisprozedur
von: Erich G.

Geschrieben am: 31.07.2008 17:31:33
Hallo Peter,
ohne deinen Code kann man nur raten...
Probier mal eine dieser beiden Varianten aus:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim calS As XlCalculationState
If Not Intersect(Target, Range("d21")) Is Nothing Then
calS = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
'      deine Anweisungen
Application.Calculation = calS
Application.EnableEvents = True
End If
End Sub
Private Sub xWorksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("d21")) Is Nothing Then
Application.EnableEvents = False
'      deine Anweisungen
Application.EnableEvents = True
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Bild

Betrifft: AW: Ereignisprozedur
von: Peter F.
Geschrieben am: 31.07.2008 19:35:09
Hallo Erich,
ich kann nur sagen : ASTREIN !
Die erste Variante hat auf Anhieb wunderbar funktioniert.
Vielen Dank für deinen "Gehirnschmalz".
Gruß,
Peter (aus Moers)

Bild

Betrifft: AW: Ereignisprozedur - Korrektur
von: Erich G.

Geschrieben am: 01.08.2008 19:13:46
Hallo,
in der ersten Variante muss calS anders deklariert werden, statt
Dim calS As XlCalculationState
sollte es besser heißen:
Dim calS As XlCalculation
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

 Bild
Excel-Beispiele zum Thema "Ereignisprozedur"
SVERWEIS als Ereignisprozedur