Excel an beliebiger Stelle beim Ausführen eines Makros schließen und erneut starten?

555
a.t.

Angenommen, es gibt einen Marcro example_codein einer Excel 2016-Datei: Diese enthält example_excel.xlsmviel Code, erstellt jedoch keine externen Dateien (alle Berechnungen werden in durchgeführt example_excel.xlsm.

Ich war gespannt, ob es einen Weg gibt:

  1. Unterbrechen Sie den laufenden Code zu einem beliebigen Zeitpunkt.
  2. Fügen Sie die nächste Zeile im Code manuell hinzu: Führt eine Funktion / ein Sub aus, die Folgendes ausführt:
  3. Speichert den vollständigen example_excel.xlsmZustand (einschließlich der aktivierten und ausgewählten Tabelle und Zelle sowie der Variablen / der Umgebung zum Ausführen des Codes),
  4. Schließen Sie es an einer beliebigen Stelle im Code und
  5. Öffnen Sie das Excel erneut
  6. Fahren Sie mit dem Code fort, example_codean dem Sie aufgehört haben.
  7. Nach dem Entfernen der eingefügten Zeile, die den Excel-Status speichert,
  8. entweder sofort
  9. oder nach dem Anklicken von 1 Taste / Ausführen von 1 Makro?

Da ich einen komplexen Code habe, der in Instanzen von 2 Stunden ausgeführt wird, während mehrere programmierte Setups des "Solver" ausgeführt werden und ein bestimmter Solver-Status besprochen wird, warte ich eine Stunde, bevor dieser Status auftritt / ausgelöst wird.

Jetzt können Sie alle in diesem Status vorhandenen Parameter, Blatt- und Zellenstatus nachschlagen, in einem separaten Blatt ablegen und sie dann erneut initialisieren. Dies ermöglicht jedoch keine Flexibilität bei der Fehlersuche, wenn ein anderer Status ausgewertet werden muss, und es ist auch nicht zweckmäßig, wenn das .ie-Objekt mit einer Endlosschleife verwendet wird, z. B. ein Elternteil ein Kind mit einem Element, das dem Elternteil des Kindes angehört wieder (ich dachte, das existierte, obwohl ich nicht sicher bin).

Die schwierige Antwort lautet: Schreiben Sie den Code neu, und ändern Sie ihn so, dass er weniger komplex und aufschlussreicher wird. Dass ich dies definitiv tun muss, auch wenn dies getan wird, ist ein verallgemeinertes Werkzeug zum Speichern der Zustände während des Laufens zumindest für mich wünschenswert.

Bisherige Versuche: [in edit-wird ausführlicher.] Meine Hauptschwierigkeit besteht darin, dass ich nicht alle Parameter / Variablen durchlaufen kann, wenn die Liste der Parameter unbekannt ist.

Da das ursprüngliche Problem aus mehreren Läufen von 2 Stunden bestand, habe ich einen Code geschrieben, der automatisch alle Blätter und alle Module und Formulare aus dem aktuellen Excel in ein anderes Excel kopiert. Dies ermöglicht es, alles außer den Variablen innerhalb des Codes oder der Blatt- und Zellenaktivierung zu speichern.

Da dieser Code nicht spezifisch für eine beliebige Zeit während eines laufenden Codes gilt, noch die von Excel verwendeten Variablen kopiert, betrachte ich diesen Code als "off-topic", sofern nichts anderes verlangt wird.

Ich habe das Gefühl, dass ich nach einem sehr eingeschränkten Lösungsansatz suche. Vorschläge für die Suche nach anderen / umfassenderen Optionen zur Lösung des Problems sind daher willkommen!

0
Nein, dafür gibt es keinen integrierten Weg. VBA kann keine Informationen zwischen den Läufen speichern. Sie haben nur die Möglichkeit, Ihr Makro so zu schreiben, dass alle relevanten Informationen in ein Arbeitsblatt geschrieben und zurückgelesen werden, wenn Sie die Ausführung fortsetzen müssen. Máté Juhász vor 5 Jahren 0
Vielen Dank @ MátéJuhász, ich nehme an, ich weiß nicht genug über die richtigen Programmieretiketten, um zu verstehen, warum diese Option in Excel nicht sehr effektiv ist, aber vielleicht gibt es einen anderen Grund. Möglicherweise werden einige kreative Arbeitsumgebungen vorgeschlagen. a.t. vor 5 Jahren 0
"Vielleicht werden einige kreative Workouts vorgeschlagen" - was genau erwarten Sie? VBA ist im Grunde eine Skriptsprache, die zur Automatisierung von Aufgaben in Excel enthalten ist und nicht als weitere Aufgabe gedacht ist. Es gibt Einschränkungen in Bezug auf Leistung und Funktionalität. Natürlich können Sie sie umgehen, aber dazu müssen Sie viel Code schreiben. Máté Juhász vor 5 Jahren 0
Was ich erwarte, ist, dass ich nicht der einzige bin, der versucht hat, dieses Problem anzugehen, anstatt es zu umgehen. Ich gehe davon aus, dass es eine Möglichkeit gibt, dass jemand es für ein weniger schwieriges Szenario gelöst hat (man könnte zum Beispiel ohne den Löser einen Code schreiben, der den Zustand tatsächlich automatisch speichert.) Ich erwarte das, wenn diese Person / einige dieser Personen diesen teilen Informationen, gibt es eine Möglichkeit, dass diese unterschiedliche Perspektive mir erlaubt, mein Problem zu lösen. Ich werde meine Lösung für das schwierigere / andere Problem veröffentlichen, wenn ich eines finde. Ich erwarte, dass es jemand anderen nach mir nützen kann. a.t. vor 5 Jahren 0
Ich habe so etwas noch nicht gemacht, ich hoffe, jemand anders wird es teilen. Auf jeden Fall muss dieser Ansatz verfolgt werden: Schreiben Sie ALLE Variablen entweder regelmäßig oder bei jeder Änderung in die Kalkulationstabelle, und lesen Sie sie bei Wiederaufnahme des Vorgangs zurück. Ich bin sicher, es wird den Code sehr komplizieren. Máté Juhász vor 5 Jahren 0
@ MátéJuhász Vielen Dank für den Vorschlag. Mir wurde klar, dass das Problem zu zwingend ist. Die Variablen werden regelmäßig gespeichert oder bei jeder Änderung wird der Code langsamer und komplizierter. Die manuelle Ausführung einer Zeile vor dem Schließen sollte zeiteffizient sein. (Dies würde es erlauben, nur diesen Zustand zu speichern und nicht die fortlaufenden Zustände). Also werde ich diese Option hinzufügen. a.t. vor 5 Jahren 0

0 Antworten auf die Frage