Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从函数中调用带有传递变量的sub_Excel_Vba - Fatal编程技术网

Excel 从函数中调用带有传递变量的sub

Excel 从函数中调用带有传递变量的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时,使

我有一个被调用的函数,它需要两个传递的变量

这是第一行: 函数dimerrngstart As Long,rngEnd As Long

现在,在这个函数的中间,我调用子: 呼叫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.问题是由参数的存在引起的,还是由参数中的值引起的?