Microsoft Excel

Herbers Excel/VBA-Archiv

Rückwärtsschleife wird nicht durchlaufen


Betrifft: Rückwärtsschleife wird nicht durchlaufen von: Marc
Geschrieben am: 16.09.2019 12:15:15

Hallo liebe Forumsgemeinde,

in folgendem Code möchte ich Einträge in einer Liste löschen mit Hilfe von Werten, die ich zuvor in einem Array festgehalten habe. Damit ich die Zeilennummern durch die Löschung nicht anpassen muss möchte ich die Schleife vom letzten Eintrag im Array zum ersten laufen lassen, also die Listeneinträge beim Letzten Eintrag beginnend löschen.

Merkwürdigerweise ignoriert das Makro aber meine For next Schleife für y (Schleife 2):

  Public Sub Eraser(ByVal Referenz As String, ByVal EntryNr As Long, ByVal Endrow As Long, ByVal  _
  SpaltenIndex As Integer, ByVal Spalte2Index As Integer, ByVal Betrag As Currency)
  
  
  Dim j As Long
  Dim Nextlog As Long
  Dim Payments As Integer ' Hilfsvariable, falls eine Forderung durch mehrere Zahlungen geklärt  _
  wurde
  Payments = 0
  
  Dim tArray() As Long
  ReDim tArray(Payments)
  
  tArray(Payments) = EntryNr - 1
  
  ' Abgleich & Kumulation der gefunden Einträge
  
  
  For j = EntryNr To Endrow
  
  If Restanten.Cells(j, SpaltenIndex).Value = Referenz Then
  
  Betrag = Betrag + Restanten.Cells(j, Spalte2Index).Value
  
  Payments = Payments + 1
  
  ReDim Preserve tArray(Payments)
  
  tArray(Payments) = j
  
  Else
  End If
  
  Next j
  
  
  ''''''''''' Übertrag ins Logsheet
  
  If Logsheet.Range("A1").Value = "" Then Logsheet.Range("A1").Value = "Logdaten:"  ' Erste Zeile  _
  füllen da es sonst Probleme beim Ablauf gibt
  
  
  
  ' Kopieren der Einträge ins Logsheet
  If Betrag = 0 Then
  
  'Schleife 1 - Kopieren
  
  For x = 0 To Payments
  
  Nextlog = Logsheet.UsedRange.Rows.Count + 1  ' Nächste freie Zeile im Logsheet ermitteln
  
  Restanten.Rows(tArray(x)).Copy Logsheet.Rows(Nextlog)
  
  Next x
  
  'Schleife 2 - Löschen
  
  For y = Payments To 0 ' (Vom Letzten zum Ersten Eintrag damit die Zeilnummern durch die Lö _
  schung nicht geändert werden müssen.)
  
  Restanten.Rows(tArray(y)).Delete
  
  Next y
  
  
  Else
  End If
  
  End Sub


Sobald das Makro bei der Schleife ankommt springt es einfach zu EndIf und fährt fort.

Weiß jemand woran das liegt?

VG,
Marc
  

Betrifft: AW: Rückwärtsschleife wird nicht durchlaufen von: 1713278.html
Geschrieben am: 16.09.2019 12:23:02

Hi

Evtl. so?

For y = Payments To 0 step -1

nicht getestet!

  

Betrifft: AW: Rückwärtsschleife wird nicht durchlaufen von: 1713279.html
Geschrieben am: 16.09.2019 12:24:19

Moin!
Du musst bei einer SChleife auch die Richtung angeben und die Schrittweite. Wenn nicht, nimmt Excel immer +1. Das heißt es wird bei jedem Durchlauf um 1 hochgezählt.
Bei dir sollte der Schleifenkopf so aussehen:

For y = Payments To 0 step -1

VG