Excel VBA: خطأ في معالجة كسر منتصف الرمز

0

حلقات الشفرة من خلال كمية هائلة من البيانات التي تؤدي العمليات الحسابية. يعمل بشكل جيد لأول كتابين. المصنف الثالث ، فواصل معالجة الخطأ فجأة - لم يعد يعمل. أفكار لماذا؟

1) Break on Unhandled Errors تم وضع علامة بشكل صحيح في الخيارات

2) يتبع كل خطأ معالجة عند الخطأ GoTo 0

3) يكسر هذا في On Error Resume Next وفي On Error GoTo ErrHandler.

أعتقد أن OERN يتجاهل أي خطأ آخر على أي حال؟

هذا هو الرمز المطول. أخذت العديد من التعريفات المتغيرة لتقصيرها.

amount = lastcolumn / 6
totalstrikes = 0
Do Until amount = 0
    currentcolumn = amount * 6 - 5
    i = 2
Do Until Sheets("Data").Cells(i, currentcolumn).Value = ""
    currentminute = Sheets("Data").Cells(i, currentcolumn).Value
    If oldminute <> 0 Then
    On Error GoTo ErrHandler
        If WorksheetFunction.MRound(currentminute - oldminute, 1 / 86400) >= 0.0007 Then
            'Do Stuff
        End If
5        End If
    On Error GoTo 0
        Do Until Sheets("Data").Cells(i, currentcolumn) <> currentminute
        If InStr(1, hitlist, Sheets("Data").Cells(i, currentcolumn + 1).Value) = False Then
            totaltime = totaltime + CSng(Sheets("Data").Cells(i, currentcolumn + 4).Value)
            totaltotal = totaltotal + CSng(Sheets("Data").Cells(i, currentcolumn + 2).Value)
        End If
        i = i + 1
    Loop
    On Error Resume Next
    If totaltime / totaltotal <= failuretime Then
        Strike = 1
    Else
        Strike = 2
    End If
    On Error GoTo 0
    If minute1 = 0 Then
        'do stuff with the minutes
    End If
    oldminute = currentminute
Loop
amount = amount - 1
Loop
Exit Sub
ErrHandler:
If WorksheetFunction.MRound((-1 * (currentminute - oldminute)), 1 / 86400) >= 0.0007 Then
    Resume Next
Else
    GoTo 5
End If
End Sub

شكرا لك مقدما.

1 إجابة

6
افضل جواب

يمكنك القيام بذلك بهذه الطريقة وإدارة أخطاء وقت التشغيل الخاصة بك:

If WorksheetFunction.MRound(currentminute - oldminute, 1 / 86400) >= 0.0007 Then
    'Do Stuff
End If

... أو بدون الحاجة إلى إدارة أخطاء وقت التشغيل ، من خلال السقوط WorksheetFunction وبدلاً من ذلك ، اختبار قيمة إرجاع الدالة لخطأ:

Dim m
m = Application.MRound(currentminute - oldminute, 1 / 86400)
If IsError(m) Then
    m = Application.MRound((-1 * (currentminute - oldminute)), 1 / 86400)
End If
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام