Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1424to1428
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

Endlosschleife vBA

Endlosschleife vBA
02.05.2015 07:27:42
Gisela
Liebe Gemeinde,
ich habe folgendes Problem:
aus der Spalte im Bereich AR19:AR7542 soll jede Zeile in Tabelle 2 geschrieben werden, die die Bedingung AR19=1...AR7542=1 erfüllt. Funzt auch einwandfrei, mein Problem isst nur, dass wenn keine Zelle mit dem Wert 1 in diesem Bereich vorhanden ist, sich das Ganze in einer Endlosschleife windet. Wie bricht der Code ohne Debug-Modus ab, wenn keine Zelle diese Bedingung erfüllt?
Range("A1").Select
Dim i As Integer
Dim cell As Range
i = 19
For Each cell In Tabelle1.Range("AR16:AR7542")
If Not cell Is Nothing Then
If cell.Value = 1 Then
cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
i = i + 1
End If
End If
Next cell
Sheets("Tabelle2").Select
Sheets("Tabelle1").Select
Rows("16:16").Select
Selection.Copy
...
Beste Grüsse
Gisela

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Endlosschleife vBA
02.05.2015 08:36:57
Luschi
Hallo Gisela,
ich habe den Code mal getestet und bei mir kommt keine Endlosschleife, wenn kein Wert 1 im genannten Bereich gefunden wird; kann auch nicht.
Meine Frage: Wo soll er den abbrechen? Die For-Schleife ist i.O nur folgende If-Bedingung macht keinen Sinn:
If Not cell Is Nothing Then
und kann gelöscht werden (einschl. End If). die Variable 'cell' kann innerhalb von 'For Each'-Schleifen niemals den Wert 'Nothing annehmen. Dann müßt Vba auf eine Zelle treffen, die es überhaupt nicht gibt. Nichtsichtbare Zellen zählen aber nicht zu dieser Kategorie und existieren immer.
Bei mir kommt nur ein Lfz-Fehler, wenn in einer der Zellen von Tabelle1.Range("AR16:AR7542")
ein Fehlerwert steht.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Endlosschleife vBA
02.05.2015 08:56:08
RPP63
Hallo!
Warum nutzt Du nicht den Autofilter, filterst auf 1 und kopierst den sichtbaren Bereich en bloc?
Dies geht natürlich auch per VBA und ist um Längen schneller.
Gruß Ralf

Sorry Luschi
02.05.2015 08:57:44
RPP63
Mein obiger Beitrag bezieht sich natürlich auf den TE.
(Irgendwann schnalle ich hier auch mal die Baumstruktur)
Gruß Ralf

AW: Endlosschleife vBA
02.05.2015 23:10:28
Gisela
Hallo Luschi,
ich denke, es wäre am einfachsten, den Makro komplett abzubrechen (also code gleich am Anfang davon), wenn man ihm mitte,ilt, dass wenn AR14=0 (da bilde ich die Summe von AR16:AR7542) ist, er das Ganze abbricht? Wie würde da der Code aussehen?
Beste Grüsse
Gisela

Anzeige
AW: Endlosschleife vBA
04.05.2015 22:09:22
Gisela
Hallo Luschi,also der
Kreis dreht und dreht sich und es kommt keine LZF oder ähnliches... Durch zweimaliges Drücken der esc-Taste bricht er ab und fordert mich zum debuggen der fettgedruckten Zeile auf:
If Not cell Is Nothing Then
If cell.Value = 1 Then
cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
i = i + 1
...
Wenn ich
If Not cell Is Nothing Then
lösche, läuft der makro überhaupt nicht mehr:
hier einmal der komplette Makro:
Sub Michelnummern()
Rows("1:15").Select
Selection.Copy
Sheets("Tabelle2").Select
Range("A1").Select
ActiveSheet.Paste
Range("A1").Select
Sheets("Tabelle1").Select
Range("A17").Select
Application.CutCopyMode = False
Range("A1").Select
Dim i As Integer
Dim cell As Range
i = 19
For Each cell In Tabelle1.Range("AR16:AR7542")
If Not cell Is Nothing Then
If cell.Value = 1 Then
cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
i = i + 1
End If
End If
Next cell
Sheets("Tabelle2").Select
Sheets("Tabelle1").Select
Rows("16:16").Select
Selection.Copy
Sheets("Tabelle2").Select
Range("A18").Select
ActiveSheet.Paste
Rows("18:18").Select
Application.CutCopyMode = False
With Selection.Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Selection.RowHeight = 30
Columns("B:B").ColumnWidth = 20.64
Sheets("Tabelle1").Select
Range("BO17:BO20").Select
Selection.Copy
Sheets("Tabelle2").Select
Range("BO17").Select
ActiveSheet.Paste
Sheets("Tabelle2").Select
Sheets("Tabelle1").Select
Range("BI18").Select
Selection.Copy
Sheets("Tabelle2").Select
Range("BI18").Select
ActiveSheet.Paste
Range("B1").Select
End Sub
WIe kann ich den Makro abbrechen lassen, wenn keine Zelle im AR-Bereich den Wert 1 enthält?
Beste Grüsse
Gisela

Anzeige
AW: Endlosschleife vBA
04.05.2015 22:24:32
Daniel
Das ist keine Endlossschleife.
Es dauert halt nur ein bisschen, bis alle Zeilen abgearbeitet sind.
wenns schneller gehen soll, wäre folgendes Vorgehen anzuraten:
ersetze diesen Codeteil
For Each cell In Tabelle1.Range("AR16:AR7542")
If Not cell Is Nothing Then
If cell.Value = 1 Then
cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
i = i + 1
End If
End If
Next cell
durch folgendes:
With Sheets("Tabelle2")
Tabelle1.Range("16:7542").Copy Destination:=.Range("A19")
With .SpecialCells(xlcelltypelastcell)
With Range(.Offset(18 - .row, 1), .Offset(0, 1))
.FormulaR1C1 = "=IF(RC44=1,Row(),0)
.cells(1, 1).value = 0
.EntireRow.RemoveDuplicates
.ClearContents
end With
End With
End With

dieser Code kopiert erstmal den ganzen Zellbereich.
Dann werden per Formel alle Zeilen die gelöscht werden müssen mit 0 markiert und die anderen mit der zeilennummer.
Somit kann man dann die zu löschenden Zeilen mit der Funktion Duplikat-Entferen entfernen, welche sehr schnell ist und auch grösste Datenmengen verarbeitet.
das ist wesentlich effektiver als das Zeilelenweise kopieren, weil das kopieren des ganzen Blocks fast genauso lange dauert wie das kopieren einer einzigen Zeile.
Gruß Daniel

Anzeige
AW: Endlosschleife vBA
06.05.2015 00:12:18
Gisela
Hallo Daniel,
da meine VBA-Kenntnisse bescheiden sind, verstehe ich leider nur Bahnhof...
Beste Grüsse
Gisela

AW: Endlosschleife vBA
06.05.2015 07:35:08
Daniel
Bevor du ein Macro Schreibstil, solltest du dir erstmal Gedanken darüber machen, wie du die Aufgabe am einfachsten und schnellsten lösen kannst, wenn du es von Hand machen musst.
Von Hand würdest du ja auch nicht jede Zeile einzeln kopieren, sondern den Autofilter einsetzen und dann kopieren, oder erst alles kopieren und dann in der Kopie die nicht benötigten Zeilen wider löschen (auch wieder mit Autofilter oder mit dem Duplikate-entfernen.
Diesen weg programmierst du dann nach.
Gruß Daniel

Anzeige
AW: Endlosschleife vBA
06.05.2015 11:50:40
Gisela
Hallo Daniel,
wie wäre der Code wenn ich sagen will:
wenn AR14=0 (dort wird die Summe dieser Spalte gebildet), dann führe den restlichen Code nicht mehr aus?
Beste Grüsse
Gisela

AW: Endlosschleife vBA
06.05.2015 11:52:07
Gisela
Hallo Daniel,
wie wäre der Code wenn ich sagen will:
wenn AR14=0 (dort wird die Summe dieser Spalte gebildet), dann führe den restlichen Code nicht mehr aus?
Beste Grüsse
Gisela

AW: Endlosschleife vBA
06.05.2015 12:02:45
Daniel
Hi
mit der Abfrage:

If Range("AR14").value  0 Then
hier dann der weitere Code
End if
Gruß Daniel

AW: Endlosschleife vBA
06.05.2015 12:02:49
Daniel
Hi
mit der Abfrage:

If Range("AR14").value  0 Then
hier dann der weitere Code
End if
Gruß Daniel
Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige