Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1664to1668
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

Prozess unterbrechen und später fortsetzen?

Prozess unterbrechen und später fortsetzen?
09.01.2019 08:45:06
Steve
Gibt es eine einfache Möglichkeit, eine Sub per Button anzuhalten, alle Variablen zu speichern und später an derselben Stelle wieder hineinzuspringen und die Berechnungen fortzuführen?

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
nein
09.01.2019 08:48:27
Daniel
AW: nein
09.01.2019 09:00:03
Steve
Also ich unterbreche meinen Prozeß mit

DoEvents                  'was ist in der Zwischenzeit Passiert?
If Abbrechen = True Then  'wenn "Abbrechen" gedrück wurde wird...
Abbrechen = False
Debug.Print Abbrechen
End                    '...Beende die Prozedur
End If
Ich könnte doch alle Variablen in der then Bedingung in Felder einer Tabelle schreibe. Auch alle Schleifenparameter. z.B. TabelleX.Cell(X,Y).value = i
und die Sub so umschreiben, dass sie jede Schleife startet mit (am Beispiel i):

if TabelleX.Cell(X,Y).value = "" Then
i_Start=1
Else
i_Steart = TabelleX.Cell(X,Y).value
For i = i_gespeichert to N
...oder?
Anzeige
AW: nein
09.01.2019 09:02:17
Daniel
ja, kannst du machen.
du hattest aber nach "einfach" gefragt.
Wenn's also aufwendiger sein darf, ...
09.01.2019 09:38:55
Luc:-?
…Steve,
kannst du auch von vornherein alle relevanten Variablen global anlegen (Vorsicht, können bei Arbeiten am VBA-Projekt oder Absturz ihren Wert verlieren!) oder sie als definierte benannte Konstanten der Datei einrichten und speichern. Außerdem kann man auch den Einsprung in die SubProzedur variabel gestalten (falls bestimmte PgmBlöcke bereits abgearbeitet wurden), indem man feste Abbruch­Pktt festlegt und abhängig von einem variablen AufrufParameter bzw einer weiteren globalen Variablen oder benannten Konstante dann genau in der Folgezeile des AbbruchPkts fortsetzt.
Solche „Hintertüren“ eines ProzedurAufrufs sind ein schon sehr alter Hut, den bereits einige frühe höhere PgmmierSprachen kannten (und standardmäßig vorsahen).
Morhn, Luc :-?
Anzeige
AW: Wenn's also aufwendiger sein darf, ...
09.01.2019 11:42:18
Steve
Hallo Luc
Ja, ich erinnerte sowas
Hast Du vielleicht ein Beispiel für so einen Abbruchpunkt Einsprung?
Nicht direkt, aber das ist auch nicht schwer, ...
09.01.2019 15:07:23
Luc:-?
…Steve,
denn du hast ja schon eine wesentliche Voraussetzung in deinem Pgm drin → DoEvents. Jetzt kannst du doch den Button-Status nur an bestimmten PgmStellen abfragen, so kann auch verhindert wdn, dass PgmZyklen unterbrochen wdn, (ggf auch eine Boolesche Variable, die bei Abbruch gesetzt wird → das hast du wohl auch so im Pgm) und im Betätigungsfall alle relevanten Inhalte in benannten Xl-Kon­stan­ten speichern (inkl der für den erneuten PgmAufruf, falls du hierfür sicherheitshalber keine Static-Variable - s.u.- verwenden willst) und den Status zurücksetzen (könnte auch ein dort aufgerufenes UnterPgm erledigen → GoSub einsprungmarke; am UP-Ende dann Return). Die anschließende PgmZeile dann mit einer Sprungmarke beginnen lassen.
Am PgmAnfang liest du dann stets zuerst die benannten Konstanten ein, deren Namen du als Konstantenwerte (Const) in die Dekla­ra­tion setzen solltest. Dann kannst du im Pgm statt ihrer die Namen dieser PgmKonstanten verwenden (pflegeleichter!). Damit bist du dann immer auf dem letzten Stand, auch, wenn du erst am nächsten Tag fortsetzt. Danach springst du zu der jeweils relevanten Fort­set­zungs­sprungmarke → On fortsetzungsvariable GoTo kommagetrennteFortsetzSprungMarkenListe. Nach jedem passierten AbbruchPkt muss, egal ob er wirksam wurde oder nicht, die Fortsetzungsvariable vor evtl ZwischenSpeicherung um 1 erhöht wdn.
Wenn die Datei nie zwischendurch geschlossen wdn soll und darf, kann hierfür auch eine als Static deklarierte PgmVariable benutzt wdn, im Prinzip auch für alle anderen relevanten Variablen. Man könnte die Fortsetzungsvariable aber auch als Parameter beim PgmAufruf ver­wenden, aber dann braucht man AufrufHilfsProzeduren, für jeden Fortsetzungseinsprungspkt eine, da eine Prozedur (in VBA) nicht manuell oder per Button parametriert aufgerufen wdn kann. Für den DirektStart der vollen HptProzedur braucht man keine Auf­ruf­Pro­zedur, wenn ihr Kopf-Parameter Optional und As Variant deklariert wurde. Der Parameter ist dann missing und kann am PgmAnfang 0 gesetzt wdn (If IsMissing(parameter) Then parameter = 0).
Ist die/der Fortsetzungsvariable/-parameter=0, wird der bedingte Sprungbefehl am PgmAnfang nicht ausgeführt und das Pgm läuft von seinem Anfang an.
Übrigens, verpönter sog Spaghetti-Code entsteht dadurch nicht, nur eine deutliche BlockStruktur des Pgms (wenn man konsequent vorwärtspgmmiert und -springt — unumgängliche Ausnahme UP-Return).
Luc :-?
Anzeige
AW: Nicht direkt, aber das ist auch nicht schwer, ...
09.01.2019 19:36:18
Steve
Danke Euch & Vor allem Luc. Hat geklappt!
Bitte sehr, gern geschehen! ;-) owT
09.01.2019 20:53:06
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige