Excel-VBA: Events nach Reset des VBA-Moduls wieder starten

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Florian_K148.

    Excel-VBA: Events nach Reset des VBA-Moduls wieder starten

    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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ai5g“ ()