2016-11-22 2 views
0

Meine Frage aktualisiert. Ich lege ein Flussdiagramm und Screenshots meiner Blätter, damit ihr es besser verstehen könnt.Warum reagiert mein Excel nicht mehr, wenn ich versuche, meinen VBA-Code auszuführen?

Chart

Sheet

Wenn ich anfangen, dies zu laufen, Excel reagiert nicht mehr. Ich kann nicht finden, wo der Fehler ist. Ich hoffe, dass jemand helfen kann! Ich recherchierte über VBA-Codes, aber ich denke, etwas fehlt noch?

Sub F110Loop() 

Dim x As Integer 'current amount 
Dim y As Integer 
Dim d As Double 'delta between Disbursement date and Cheque Release date 
Dim Current As Integer 
Dim Least As Integer 
Dim Dis As Worksheet 
Dim Cheque As Worksheet 
Dim wb As Workbook 

Set wb = ThisWorkbook 
Set Dis = wb.Sheets("Disbursements") 
Set Cheque = wb.Sheets("Cheque Info") 
wb.Activate 

For x = 4 To 600 
    Do While Dis.Cells(x, 9).Value > 1 
     'IF same amount, get row number to get corresponding date, reference that date 
     For y = 3 To 600 
      If Dis.Cells(x, 6).Value = Cheque.Cells(y, 5).Value Then 
       'THEN get delta 
       Current = Dis.Cells(x, 4).Value -Cheque.Cells(y, 2) 
       'IF current is less than the least delta 
      ElseIf Current < Least Then 
       'THEN update new value of delta 
       Current = Least 
      Else 
       'copy paste the date (from the least delta row) 
       Cheque.Cells(y, 2).Copy Destination:=Dis.Cells(x, 8) 
      End If 
     Next y 
    Loop 
Next x 

End Sub 
+0

Können Sie einige Informationen bringen über die Daten in den Zellen? Dies liegt möglicherweise daran, dass Excel VBA nur über eine begrenzte Arbeitsspeicherkapazität verfügt, sodass große Arbeitsblätter bei der Schleifenbildung dazu führen können, dass der Arbeitsspeicher reagiert. – McBoman

+0

Was soll diese Linie tun? 'Dis.Cells (x, 4) .Wert -Cheque.Cells (y, 2) = Current' – arcadeprecinct

+2

Zusätzlich zu dem, was @CharlesWilliams bereits erwähnt hat, sollten Sie ein paar Zeilen wiederholen: (1)' Dis.Cells (x, 4) .Wert -Cheque.Cells (y, 2) = Current'. Ich glaube, das sollte "Current = Dis.Cells (x, 4) .Value - Cheque.Cells (y, 2) .Value" sein. Außerdem wird (2) die Zeile'ElseIf Current Ralph

Antwort

4

Wahrscheinlich Sie eine Endlosschleife, weil Sie nie Dis.Cells ändern (x, 9)

Do While Dis.Cells(x, 9).Value > 1 
' make no change to Dis.Cells(x, 9) 
Loop 
+0

Hallo! Vielen Dank für die Antwort! Es wird sich nicht ändern mit "Für x = 4 bis 600"? – Chesca

+0

@Chesca Die 'For x = 4 bis 600' können nicht das' nächste x' auslösen, da die 'do while' Schleife wiederholt wird. Zellen (x, 9) .Wert> 1 '' End If' stattdessen –

1

Sie haben, wie etwas zu tun:

x = 4 
Do while Dis.Cells(x,9).value > 1 
    x = x + 1 
loop 
+0

Hallo @nofey, wie kann ich es begrenzen, so dass es weiterhin nur bis x = 600 schleifen wird? Danke !! – Chesca

Verwandte Themen