2016-06-21 7 views
0

Ich erhalte einen "Überlauf" -Fehler, aber der Sub läuft wie erwartet. Was ist der Fehler, den ich übersehe? Danke im Voraus.Was ist der Überlauffehler zum Debuggen?

Sub Bill_Detail_Exp_Prem_BUTTON1_() 

Dim LastRow As Long 
Dim wb1 As Workbook 
Dim i As Long 

Set wb1 = Workbooks("macro all client v.01.xlsm") 

LastRow = wb1.Sheets("Detail").range("C:C").Find("", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

For i = 7 To LastRow 


    If wb1.Sheets("Detail").Cells(i, 15) <> 0 And wb1.Sheets("Detail").Cells(i, 16) = 0 Then 


     wb1.Sheets("Detail").Cells(i, 1) = ((wb1.Sheets("Detail").Cells(i, 15))) 

    Else 

     wb1.Sheets("Detail").Cells(i, 1) = ((wb1.Sheets("Detail").Cells(i, 17)) * (wb1.Sheets("Detail").Cells(i, 15)))/(wb1.Sheets("Detail").Cells(i, 16)) 

    End If 

Next i 


End Sub 
+0

Ich gehe davon gibt es eine Chance, dass '(. Wb1.Sheets ("Detail") Zellen (i, 16)) ' könnte sein, Null –

Antwort

1

Ich würde ändern die IF Logiken ein bisschen:

For i = 7 To LastRow 
    If wb1.Sheets("Detail").Cells(i, 16) = 0 Then 
     If wb1.Sheets("Detail").Cells(i, 15) <> 0 Then 
      wb1.Sheets("Detail").Cells(i, 1) = ((wb1.Sheets("Detail").Cells(i, 15))) 
     End If 
    Else ' it means wb1.Sheets("Detail").Cells(i, 16) <> 0 , so no division by 0 and no Overflow Error 
     wb1.Sheets("Detail").Cells(i, 1) = ((wb1.Sheets("Detail").Cells(i, 17)) * (wb1.Sheets("Detail").Cells(i, 15)))/(wb1.Sheets("Detail").Cells(i, 16)) 
    End If 
Next i 
+0

Sehr geschätzt. Sie alle rocken. –

0

Schwer zu sehen, was das Problem ist, einen Blick auf die Daten, ohne sich, aber Sie können Folgendes versuchen:

LastRow = wb1.Sheets("Detail").range("C:C").Find("", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

mit

LastRow = wb1.Sheets("Detail").range("C1").End(xlDown).Row + 1

Auch ersetzen Beachten Sie, dass Sie VBA debuggen können, indem Sie Haltepunkte (F9) im Code platzieren.

1

Sie haben getestet, dass Zellen (i, 16) nicht null sind, aber nur für den Fall, dass Zellen (i, 15) <> 0 sind. Möglicherweise müssen Sie einen weiteren Test hinzufügen, einen ElseIf, um zu testen, ob die Zellen (i, 16) Null sind, bevor Sie zur Endbedingung übergehen. Ein Überlauf ist identisch mit # DIV/0.