我是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))
问题仍然存在。
感谢您的帮助!
答案 0 :(得分:2)
您的代码(Range("N" & i).Value / Range("O" & i).Value
)中的除法发生之前它作为参数传递给IfError
函数。因此,如果除法失败,您的代码会崩溃并且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
答案 1 :(得分:1)
您可以检查单元格值是零还是null。如果没有,你可以进行你的计算。
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的NotNullOrZero
函数由@BrianKE回答。