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

Ereignisprozedur

Ereignisprozedur
31.07.2008 14:44:44
Peter
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

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

Betreff
Datum
Anwender
Anzeige
AW: Ereignisprozedur
31.07.2008 15:30:00
Holger
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

AW: Ereignisprozedur
31.07.2008 17:00:00
Peter
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.

Anzeige
AW: Ereignisprozedur
31.07.2008 17:26:00
Peter
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.

AW: Ereignisprozedur
31.07.2008 17:31:00
Erich
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

Anzeige
AW: Ereignisprozedur
31.07.2008 19:35:00
Peter
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)

AW: Ereignisprozedur - Korrektur
01.08.2008 19:13:46
Erich
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige