Excel 从函数中调用带有传递变量的sub
我有一个被调用的函数,它需要两个传递的变量 这是第一行: 函数dimerrngstart As Long,rngEnd As LongExcel 从函数中调用带有传递变量的sub,excel,vba,Excel,Vba,我有一个被调用的函数,它需要两个传递的变量 这是第一行: 函数dimerrngstart As Long,rngEnd As Long 现在,在这个函数的中间,我调用子: 呼叫highlightLegitRows 然后该功能按预期进行 现在,我的问题是,我现在有与此子系统关联的可选变量: Sub highlightLegitRows(Optional ByVal rngStart As Long = 0, Optional ByVal rngEnd As Long = 0) 调用此sub时,使
现在,在这个函数的中间,我调用子: 呼叫highlightLegitRows
然后该功能按预期进行 现在,我的问题是,我现在有与此子系统关联的可选变量:Sub highlightLegitRows(Optional ByVal rngStart As Long = 0, Optional ByVal rngEnd As Long = 0)
调用此sub时,使用已传递的相同值,如下所示:
呼叫highlightLegitRowsrngStart,rngEnd
我的函数似乎就到此行结束
例如,这:
Call highlightLegitRows(rngStart, rngEnd)
MsgBox "hello"
不会触发消息框。然而,这将:
Call highlightLegitRows
MsgBox "hello"
唯一的区别是在sub中添加了这些可选的传递变量。知道我哪里出错了吗
我没有发布整个函数和子函数,因为它们既冗长又复杂,但在上述更改之前,它们都按预期工作。您的代码在正常情况下可以工作。比如说
Sub Sample()
Debug.Print dimErr(1, 2)
End Sub
Function dimErr(rngStart As Long, rngEnd As Long)
Call highlightLegitRows(rngStart, rngEnd)
MsgBox "hello"
End Function
Sub highlightLegitRows(Optional ByVal rngStart As Long = 0, _
Optional ByVal rngEnd As Long = 0)
Rows(rngStart & ":" & rngEnd).Interior.ColorIndex = 3
End Sub
但在下面的场景中不会
Sub Sample()
On Error GoTo Whoa
Debug.Print dimErr(0, 0)
Whoa:
End Sub
Function dimErr(rngStart As Long, rngEnd As Long)
Call highlightLegitRows(rngStart, rngEnd)
MsgBox "hello"
End Function
Sub highlightLegitRows(Optional ByVal rngStart As Long = 0, _
Optional ByVal rngEnd As Long = 0)
Rows(rngStart & ":" & rngEnd).Interior.ColorIndex = 3
End Sub
甚至这个
Sub Sample()
Debug.Print dimErr(0, 0)
End Sub
Function dimErr(rngStart As Long, rngEnd As Long)
On Error GoTo Whoa
Call highlightLegitRows(rngStart, rngEnd)
MsgBox "hello"
Whoa:
End Function
Sub highlightLegitRows(Optional ByVal rngStart As Long = 0, _
Optional ByVal rngEnd As Long = 0)
Rows(rngStart & ":" & rngEnd).Interior.ColorIndex = 3
End Sub
请检查您的错误处理代码。出现错误时是否停止退出子函数?您的函数只是一个普通函数,还是将其用作自定义项,即在Excel中将其作为公式的一部分调用?它不是作为公式的一部分调用,该函数的结果是布尔值,并用作另一个子函数的一部分。Hmmm-UDF在遇到错误时似乎会停止,这就是为什么我怀疑这是原因。您的代码是否有任何On Error GoTo语句?这也可能导致您的代码跳出子例程,并将执行传递给错误处理程序。我们可以提出很多建议,但没有看到代码,我们是盲目的。我想另一个问题是。。。当rngStart和rngEnd都显式为0时,它是否仍然没有到达MsgSub?i、 e.问题是由参数的存在引起的,还是由参数中的值引起的?