Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
824to828
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
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Unterbrechung der Codeausführung

Unterbrechung der Codeausführung
08.12.2006 10:47:34
Marco
Hallo zusammen,
ich habe ein Makro gebaut, welches Mehrfachnennungen in einer Liste sucht und jeden Datensatz, egal wie oft er vorkommt, nur einmal in einem anderen Blatt speichert.
Das Makro funktioniert auch wunderbar. Jetzt hat ein Kollege eine Tabelle mit ca. 50000 Zeilen damit abgrasen wollen und das dauert nun mal eine ganze Weile. Mein Problem ist nun, dass ich den Code außer mit Strg+Unterbrechen nicht stoppen kann.
Alle Losungen mit END oder was auch immer funktionieren nicht. Ich kann ja im Formular nichts drücken, da nur eine Sanduhr angezeigt wird. Auch die Esc-Taste reagiert nicht (auch nicht, wenn man diese über Application.EnableCancelKey in eine Fehlerbehandlungsroutine einsetzt).
Hier der Code der Schleife, dessen Ausführung unterbrochen werden soll:
For iRow = iRowLast To iStartRow Step -1
iAnzahl = WorksheetFunction.CountIf(ActiveWorkbook.Sheets(iActiveSheet).Columns(iColSeek), _
ActiveWorkbook.Sheets(iActiveSheet).Cells(iRow, iColSeek))
If WorksheetFunction.CountIf(ActiveWorkbook.Sheets(iActiveSheet).Columns(iColSeek), _
ActiveWorkbook.Sheets(iActiveSheet).Cells(iRow, iColSeek)) &gt 1 Then
If WorksheetFunction.CountIf(ActiveWorkbook.Sheets(iWKSResult).Columns(1), _
ActiveWorkbook.Sheets(iActiveSheet).Cells(iRow, iColSeek)) = 0 Then
Sheets(iWKSResult).Cells(iRow2, 1).Value = _
ActiveWorkbook.Sheets(iActiveSheet).Cells(iRow, iColSeek).Value
Sheets(iWKSResult).Cells(iRow2, 2).Value = iAnzahl
Sheets(iWKSResult).Cells(iRow2, 3).Value = _
ActiveWorkbook.Sheets(iActiveSheet).Cells(iRow, iColExtra).Value
iRow2 = iRow2 + 1
End If
Else
With Sheets(iWKSResult)
.Cells(iRow2, 1).Value = _
ActiveWorkbook.Sheets(iActiveSheet).Cells(iRow, iColSeek).Value
.Cells(iRow2, 2).Value = iAnzahl
.Cells(iRow2, 3).Value = _
ActiveWorkbook.Sheets(iActiveSheet).Cells(iRow, iColExtra).Value
End With
iRow2 = iRow2 + 1
End If
frmChoice.txtDataRest.Enabled = True
If iDataAll Mod 5 = 0 Then
frmChoice.txtDataRest.Value = iDataAll
frmChoice.Repaint
End If
iDataAll = iDataAll - 1
Next iRow

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

Betreff
Datum
Anwender
Anzeige
AW: Unterbrechung der Codeausführung
08.12.2006 11:32:05
Matthias
Hallo Marco,
das kannst du mit einer modulweiten Variablen erledigen, welche mittels eines Abbruch-Buttons auf TRUE gesetzt wird. Damit der Code ausgeführt wird, brauchst du ein DoEvents in der Schleife.
z.B.:

Option Explicit
Dim Abbruch As Boolean
'Starte Endlosschleife:
Private Sub CommandButton1_Click()
Abbruch = False
Do
'hier kann dein Code stehen
Label1.Caption = Val(Label1.Caption) + 1
' dann diese Zeilen:
DoEvents
If Abbruch Then Exit Sub
Loop Until 1 = 2
End Sub
'Schleife abbrechen:
Private Sub CommandButton2_Click()
Abbruch = True
End Sub
Gruß Matthias
Anzeige
AW: Unterbrechung der Codeausführung
19.12.2006 07:23:48
Marco
Hallo Matthias,
vieleicht stzehe ich z. Z. etwas auf dem Schlauch, aber irgendwie komme ich da nicht weiter.
Ich nehme an, dass der Ausdruck "Loop Until 1 = 2" lediglich eine Endlosschleife darstellt. Ich frage mich jetzt nur, wie ich meine for-Schleife in diese do-Schleife bekomme. Die Bedingung "For iRow = iRowLast To iStartRow Step -1" soll ja weiterhin erhalten bleiben.
Die For-Schleife einfach in die Do-Schleife setzen macht ja auch keinen Sinn :-/ Gib mir bitte noch einen kleinen Anstoß, damit ich weiterkomme.
Danke schon mal vorab und Gruß,
Marco
AW: Unterbrechung der Codeausführung
19.12.2006 09:30:58
Matthias
Hallo Marco,
steht der Code im Modul des Userforms? Wenn ja, dann musst du am Ende deiner Schleife schreiben:

iDataAll = iDataAll - 1
DoEvents
If Abbruch Then Exit For
Next iRow

Die Abbruch-Variable wird modulweit deklariert und mit einem Abbrechen-Button gesetzt:

Private Sub CommandButton2_Click()
Abbruch = True
End Sub

Gruß Matthias
Anzeige
AW: Unterbrechung der Codeausführung
20.12.2006 10:45:59
Marco
Hallo noch mal,
ist das wichtig, dass der Code in der Userform steht? In der ursprünglichen Datei hatte ich den Code in einem Modul, der aus der Userform mit Call aufgerufen wird.
Gruß
Marco
AW: Unterbrechung der Codeausführung
20.12.2006 10:50:45
Matthias
Hallo Marco,
wenn der Code in einem normalen Modul steht, musst du die Variable "Abbruch" aber auch global definieren:
ins normale Modul:

Public Abbruch As Boolean

und nicht vergessen, die Variable beim Initialisieren der UF oder beim Start des Makros urückzusetzen!
Gruß Matthias
AW: Unterbrechung der Codeausführung
20.12.2006 15:58:40
Marco
Hallo noch mal,
vielen Dank für die Hilfe.
Zu Anfang habe ich noch mit der Abbruch-Variable gearbeitet. Klar, war dann public :-)
Allerdings hab ich es mir nun etwas einfacher gemacht und habe die Codeausführung mit End abgebrochen.
Funktioniert bestens.
Hat die Vorgehensweise mit der Abbruch-Variable einen Vorteil gegenüber dem Abbruch mit End?
Gruß
Marco
Anzeige
AW: Unterbrechung der Codeausführung
20.12.2006 16:01:30
Matthias
Hallo Marco,
bei End werden halt alle Makros beendet. Wenn das nicht stört, dürfte es kein Problem sein. Ich selbst verwende End aber eigentlich nicht, deshalb kann ich dir keine Erfahrungen mitteilen.
Gruß Matthias
AW: Unterbrechung der Codeausführung
08.12.2006 17:17:41
Marco
Hallo Matthias,
ich gestehe, ich habe noch nie mit Do Events gearbeitet. Das werde ich jetzt (wenn ich wieder daheim bin) mal versuchen.
Ich melde mich wieder, ob es klappt.
Gruß
Marco

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige