Hi,
ich hoffe ich drücke mich jetzt richtig aus
Ich habe in einer Arbeitsmappe ohne makros (XLSX) ein Blatt mit wirklich vielen Verknüpfungen (nennen wir es mal "A"), dass ich zudem oft mehrfach in einer Mappe benötige (A1, A2, A3, ...); diese Mappe darf auch keine Makros enthalten.
Diese vielen Verknüpfungen werden jedesmal, wenn ich IRGENDWO etwas verändere, aktualisiert, was Excel mitunter extrem langsam macht.
Im XLSTART-Ordner habe ich aber eine Mappe mit Makros, auf die ich zugreifen kann. Ich würde jetzt gerne alle A-Blätter von der Aktualisierung ausschließen, solange sie nicht im Vordergrund sind. Mein Ansatz hierfür war folgender:
1. In "DieseArbeitsmappe" habe ich oben
Dim EventHandler As New Events
eingetragen und darunter
Private Sub Workbook_Open()
Set EventHandler.appevent = Application
End Sub
Dann habe ich eine Klasse "Events" angelegt und dort oben eingetraegen
Public WithEvents appevent As Application
unten in dieser Klasse kann ich jetzt zwei Events abfangen:
appevent_SheetCalculate(ByVal Sh as Object)
hier prüfe ich zunächst, ob das betroffene Blatt ein "A"-Blatt ist und wenn ja, ob es im Hintergrund ist. Ist beides der Fall, dann schalte ich die Berechnung für dieses Blatt aus:
Sh.EnableCalculation = False
Wenn dieses Blatt jetzt doch mal bearbeitet wird, muss die Berechnung wieder angeschaltet werden. Dies erledige ich mit dem Event
Private Sub appevent_SheetChange(ByVal Sh as Object, ByVal Target as Range)
Das funktioniert zwar im Prinzip, aber wenn Excel bzw. das VBA-Modul auf einen Fehler stößt, dann geht der Event verloren. Ich muss also irgendwie die Codezeile
Set EventHandler.appevent = Application
ausgeführt bekommen.
Ich habe das mal hilfsweise in den Workbook_SheetActivate event (in DieseArbeitsmappe) geschrieben, so kann ich den Event durch Wechsel des Worksheets in meiner Makrodatei wieder aktivieren, aber so richtig schön ist das nicht.
Meine Frage nun: Kann ich den Event irgendwie "persistent" machen, so dass er einen Reset des VBA-Moduls übersteht? Oder kann man einen solchen Reset abfangen und den Event automatisch neu initialisieren? Oder gibt es sonst irgendeine Möglichkeit, die Berechnung eines bestimmten Datenblatts im Hintergrund zu unterbinden, diese aber sobald es im Vordergrund ist aber wieder automatisch zu aktivieren?
Vielen Dank,
ai5g
ich hoffe ich drücke mich jetzt richtig aus
Ich habe in einer Arbeitsmappe ohne makros (XLSX) ein Blatt mit wirklich vielen Verknüpfungen (nennen wir es mal "A"), dass ich zudem oft mehrfach in einer Mappe benötige (A1, A2, A3, ...); diese Mappe darf auch keine Makros enthalten.
Diese vielen Verknüpfungen werden jedesmal, wenn ich IRGENDWO etwas verändere, aktualisiert, was Excel mitunter extrem langsam macht.
Im XLSTART-Ordner habe ich aber eine Mappe mit Makros, auf die ich zugreifen kann. Ich würde jetzt gerne alle A-Blätter von der Aktualisierung ausschließen, solange sie nicht im Vordergrund sind. Mein Ansatz hierfür war folgender:
1. In "DieseArbeitsmappe" habe ich oben
Dim EventHandler As New Events
eingetragen und darunter
Private Sub Workbook_Open()
Set EventHandler.appevent = Application
End Sub
Dann habe ich eine Klasse "Events" angelegt und dort oben eingetraegen
Public WithEvents appevent As Application
unten in dieser Klasse kann ich jetzt zwei Events abfangen:
appevent_SheetCalculate(ByVal Sh as Object)
hier prüfe ich zunächst, ob das betroffene Blatt ein "A"-Blatt ist und wenn ja, ob es im Hintergrund ist. Ist beides der Fall, dann schalte ich die Berechnung für dieses Blatt aus:
Sh.EnableCalculation = False
Wenn dieses Blatt jetzt doch mal bearbeitet wird, muss die Berechnung wieder angeschaltet werden. Dies erledige ich mit dem Event
Private Sub appevent_SheetChange(ByVal Sh as Object, ByVal Target as Range)
Das funktioniert zwar im Prinzip, aber wenn Excel bzw. das VBA-Modul auf einen Fehler stößt, dann geht der Event verloren. Ich muss also irgendwie die Codezeile
Set EventHandler.appevent = Application
ausgeführt bekommen.
Ich habe das mal hilfsweise in den Workbook_SheetActivate event (in DieseArbeitsmappe) geschrieben, so kann ich den Event durch Wechsel des Worksheets in meiner Makrodatei wieder aktivieren, aber so richtig schön ist das nicht.
Meine Frage nun: Kann ich den Event irgendwie "persistent" machen, so dass er einen Reset des VBA-Moduls übersteht? Oder kann man einen solchen Reset abfangen und den Event automatisch neu initialisieren? Oder gibt es sonst irgendeine Möglichkeit, die Berechnung eines bestimmten Datenblatts im Hintergrund zu unterbinden, diese aber sobald es im Vordergrund ist aber wieder automatisch zu aktivieren?
Vielen Dank,
ai5g
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ai5g“ ()