使用传递的变量从函数内调用sub

时间:2017-11-24 19:08:16

标签: excel-vba vba excel

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

这是第一行: Function dimErr(rngStart As Long, rngEnd As Long)

现在在这个函数的中间我调用一个子: Call highlightLegitRows

然后该功能按预期继续进行。

现在,我的问题是我现在有与此子关联的可选变量:

Sub highlightLegitRows(Optional ByVal rngStart As Long = 0, Optional ByVal rngEnd As Long = 0)

调用此sub时,使用已经传递的相同值,如下所示: Call highlightLegitRows(rngStart, rngEnd) 我的功能似乎只是在这一行结束。

例如,这个:

Call highlightLegitRows(rngStart, rngEnd)
MsgBox "hello"

不会触发消息框。但是这会:

Call highlightLegitRows
MsgBox "hello"

唯一的区别是在sub中添加了这些可选的传递变量。知道我哪里错了吗?

我没有发布整个函数和sub,因为它们冗长而复杂,但在上述更改之前两者都按预期工作。

1 个答案:

答案 0 :(得分:1)

正常情况下您的代码可以使用。例如

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

请检查您的代码以进行错误处理。是否存在因错误而停止(退出子/功能)的事情?