我有以下功能,在Excel单元格中,写为=FACING_CHANGE(live, optimal, [override]):
Function FACING_CHANGE(live As Integer, opt As Integer, _
Optional override As Range) As String
If override.Value <> "" And IsNumeric(override.Value) = True Then
opt = override.Value
End If
If live = opt Then
FACING_CHANGE = "SAME " & live
ElseIf live > opt And opt = 0 Then
FACING_CHANGE = "DELETED"
ElseIf live > opt And opt > 0 Then
FACING_CHANGE = "DECREASED"
ElseIf live < opt And live = 0 Then
FACING_CHANGE = "ADDED"
ElseIf live < opt And live > 0 Then
FACING_CHANGE = "INCREASED"
End If
End Function
Run Code Online (Sandbox Code Playgroud)
返回字符串结果.我在使用可选override参数时遇到问题.它range现在是类型,因为空白单元格返回0if override是a integer,这是有效的.我需要它作为一个可选参数,因为在大多数但不是所有情况下它都将与第3个参数一起使用.
当我插入断点并逐步执行时,该函数会在第一个if语句(If override.Value...)处自动退出.以下是一些结果.任何帮助,将不胜感激!

如果Range未指定可选参数,则函数会将其作为Nothing.
然后当这一行运行时:
If override.Value <> ""
Run Code Online (Sandbox Code Playgroud)
我敢打赌VBA正在炸毁"对象引用未设置"错误,因为您正在访问对象引用的属性Nothing.
解决方案是override Is Nothing在访问之前简单地检查一下.