Ich habe ein Makro (unten), das 150.000 Iterationen vor dem Ende ausgeführt werden soll. Nachdem ich jedoch den Code für mehr als 1.000 Iterationen ausgeführt habe, wechselt Excel in den Modus "Nicht reagiert" und stürzt dann ab. Ich habe es für mehr als 12 Stunden verlassen, aber es wird nicht besser. Der Code wurde zuvor für die ersten 100.000 Iterationen verwendet und wird benötigt, um in Schritten von 250.000 bis zu 1.048.576 Iterationen auszuführen.Excel 2010 stürzt nach mehr als X Anzahl der Schleifen
Die Abstürze bringen auch Outlook, IE, und Chrome (obwohl ich aufgehört habe, sie zur gleichen Zeit auszuführen, stürzt aber immer noch ab).
Wenn ich den Code über F8 oder zu einem Prüfpunkt über F5 ausführen, läuft der Code einwandfrei. Dies ist jedoch für weitere 948.576 Iterationen unpraktisch.
Haben Sie Vorschläge, wie Sie das Problem beheben können, damit es nicht ständig abstürzt?
Die System-Spezifikationen sind: Excel 2010 i5 (3rd gen) 8 GB RAM
Code:
Dim a As Variant
Dim b As Variant
Dim c As Variant
Dim d As Variant
Dim e As Variant
Dim i As Integer
Dim j As Double
Dim strResult As Double
a = 1
b = 100001
While b <= 250000
While a <= 12
If a = 1 Then
If Cells(b, 14) = "EEEE" Then
Cells(b, a) = 1234
ElseIf Cells(b, 14) = "ZYXW" Then
Cells(b, a) = 2468
ElseIf Cells(b, 14) = "AAAA" Then
Cells(b, a) = 3579
ElseIf Cells(b, 14) = "BBBB" Then
Cells(b, a) = 9764
ElseIf Cells(b, 14) = "DDDD" Then
Cells(b, a) = 8631
Else
Cells(b, a) = "ZZZZ"
End If
ElseIf a = 2 Then
If Cells(b, 15) = 5 Then
Cells(b, a) = "JPY"
ElseIf Cells(b, 15) = 4 Then
Cells(b, a) = "GBP"
ElseIf Cells(b, 15) = 3 Then
Cells(b, a) = "CHF"
ElseIf Cells(b, 15) = 2 Then
Cells(b, a) = "USD"
ElseIf Cells(b, 15) = 1 Then
Cells(b, a) = "EUR"
Else
Cells(b, a) = "YYYY"
End If
ElseIf a = 3 Then
If Cells(b, 16) = 10234 Then
Cells(b, a) = "A27Z2"
ElseIf Cells(b, 16) = 10420 Then
Cells(b, a) = "B28Y"
ElseIf Cells(b, 16) = 10432 Then
Cells(b, a) = "C29X"
ElseIf Cells(b, 16) = 18953 Then
Cells(b, a) = "D30W"
ElseIf Cells(b, 16) = 21048 Then
Cells(b, a) = "E31V"
ElseIf Cells(b, 16) = 36542 Then
Cells(b, a) = "F32U"
ElseIf Cells(b, 16) = 36954 Then
Cells(b, a) = "G33T"
ElseIf Cells(b, 16) = 65425 Then
Cells(b, a) = "H34S"
ElseIf Cells(b, 16) = 75963 Then
Cells(b, a) = "I35R"
ElseIf Cells(b, 16) = 84563 Then
Cells(b, a) = "J36Q"
Else
Cells(b, a) = "XXXX"
End If
ElseIf a = 4 Then
strResult = 1
For i = 1 To Len(Cells(b, 18))
Select Case Asc(Mid(Cells(b, 18), i, 1))
Case 65 To 90:
strResult = strResult + Asc(Mid(Cells(b, 18), i, 1)) - 64
Case Else
strResult = strResult + Mid(Cells(b, 18), i, 1)
End Select
Next
j = WorksheetFunction.CountIfs(Range("A1:A" & b), Range("A" & b), Range("B1:B" & b), Range("B" & b))
Cells(b, a) = Cells(b, 1) & " - " & Cells(b, 2) & strResult & " - " & j
ElseIf a = 5 Then
Cells(b, a) = Cells(b, 17)
ElseIf a = 6 Then
If Cells(b, 19) = "SB" Then
Cells(b, a) = "Sub"
ElseIf Cells(b, 19) = "RD" Then
Cells(b, a) = "Red"
Else
Cells(b, a) = "XXXX"
End If
ElseIf a >= 7 Then
Cells(b, a) = Cells(b, a + 13)
End If
a = a + 1
Wend
b = b + 1
a = 1
Wend
Columns("M:Q").Select
Selection.Delete Shift:=xlToLeft
Columns("N:V").Select
Selection.Delete Shift:=xlToLeft
1) Überprüfen Sie, was abstürzt. Verwenden Sie zu viele Ressourcen oder ist die Verwendung in Ordnung, aber dauert das Makro so lange, dass Excel nicht mehr reagiert, und Sie dann Excel abstürzen, indem Sie versuchen, es zu aktivieren? Wenn es sich nur um ein sehr langes Makro handelt und Sie seinen Status überprüfen möchten, sollten Sie ab und zu ein "DoEvents" hinzufügen. 2) Beschleunigen Sie den Code. Es gibt hier viele Verweise auf "Zellen", die langsamer sind als das Speichern und Zugreifen auf ein Array. Weitere Informationen zur Optimierung finden Sie auf unserer Schwester-Website Code Review. – Mikegrann
@Mikegrann 1) Ressourcenverbrauch läuft im Leerlauf zwischen 2 - 6%.Wenn ich den Code ausführe, schießt er zwischen 75 und 95%, wobei 3 der 4 Prozessoren für vielleicht 10 Sekunden vollständig ausgeführt werden. es fällt dann auf ungefähr 25% ab, reagiert jedoch nicht. Wenn ich darauf klicke, benutze Crtl + Brk, oder ESC, das System stürzt ab. 2) Nicht sicher, wie ich ein Array in diesem verwenden würde. Könntest du beraten? – Clauric
32-Bit- oder 64-Bit-Version von Excel? –