2017-04-17 208 views
0

我是VBA的新手。最近,我已經輸入了一些代碼和下面是我的代碼示例:錯誤在VBA中溢出

Dim n As Long 
n = Range("A1", Range("A1").End(xlDown)).Rows.Count 
For i = 3 To n 
Range("P" & i).Value = WorksheetFunction.IfError(Range("N" & i).Value/Range("O" & i).Value, 0)) 
Next 

而事實證明,有溢出的錯誤。我在互聯網上搜索並找出它,我的示例代碼應該被轉換爲Long類型的數據。但是,當我改成:

Range("P" & i).Value = CLng(WorksheetFunction.IfError(CLng(Range("N" & i).Value)/CLng(Range("O" & i).Value), 0)) 

問題也依然存在。

謝謝你的幫助!

回答

2

該部門在您的代碼(Range("N" & i).Value/Range("O" & i).Value)正在發生之前它是作爲參數傳遞給IfError函數傳遞。因此,如果部門失敗,您的代碼崩潰,並且從來沒有機會做任何事情。

這樣做將是一種替代方法:

Dim n As Long 
n = Range("A1", Range("A1").End(xlDown)).Rows.Count 
For i = 3 To n 
    'Set the value in column P to a default value 
    Range("P" & i).Value = 0 
    'Switch on error handling 
    On Error Resume Next 
    'Attempt the calculation - if it fails, the value in column P will not change 
    Range("P" & i).Value = Range("N" & i).Value/Range("O" & i).Value 
    'Switch error handling off again 
    On Error GoTo 0 
Next 
+0

它真的幫助我。謝謝。 –

1

您可以檢查電池值是否是零或空。如果不是,你可以執行你的計算。

Sub Demo() 
    Dim n As Long 
    n = Range("A1", Range("A1").End(xlDown)).Rows.Count 
    For i = 3 To n 
     If NotNullOrZero(Range("O" & i).Value) Then 
      Range("P" & i).Value = WorksheetFunction.IfError(Range("N" & i).Value/Range("O" & i).Value, 0) 
     Else 
      Range("P" & i).Value = "" 
     End If 
    Next 
End Sub 

Public Function NotNullOrZero(aValue As Variant) As Boolean 
    ' Returns true if the value is not null and greater than zero 
    If Not IsNull(aValue) Then 
     If (aValue > 0) Then 
      NotNullOrZero = True 
     End If 
    End If 
    NotNullOrZero = False 
End Function 

here通過@BrianKE回答得到NotNullOrZero功能。

+1

非常感謝你! –