如何为可选 Range 参数设置默认值



我正在尝试编写一个函数,该函数将有一个 Range 作为可选参数。下面是此类函数的最小示例:

Function Example(s As String, Optional r As Range) As String
    Example = "Test"
End Function

这没关系,可以编译 VBA 模块。但我正在努力找出如何为这个可选的范围参数设置默认值,例如"B:B"。

Function Example(s As String, Optional r As Range **= Range("B:B")**) As String
    Example = "Test"
End Function

这不会编译。它抛出错误"需要常量表达式"。

检查参数是否在函数内部传递,如果没有,则将其设置在那里。

Function Example(s As String, Optional r As Range) As String
    If r Is Nothing then Set r = Range("B:B")
    Example = "Test"
End Function

谢谢,斯科特为我指明了道路。我进一步用谷歌搜索了这个,正确的方法似乎是这样的:

Function Example(s As String, Optional r As Range = Nothing) As String
    If IsMissing(r) Then
        r = Range("B:B")
    End If
    Example = "Test"
End Function

我无法理解为什么您可以为 pret 定义默认值

Scott 的答案可能是要走的路,但如果你真的希望能够在函数头中放置一个文字默认值,你可以将参数类型更改为 Variant 并为其分配默认String,如果需要,将此字符串转换为函数主体中的范围:

Function Example(Optional R As Variant = "A:B") As String
    If TypeName(R) = "String" Then Set R = Range(R)
    Example = R.Address
End Function

测试如下:

Sub test()
    Dim R As Range
    Set R = Range("A1:B1")
    Debug.Print Example()
    Debug.Print Example(R)
End Sub

哪些打印:

$A:$B
$A$1:$B$1

在某些情况下,将范围或字符串传递给函数的灵活性可能很有用。例如,可以将命名区域的名称直接传递给函数,并使其按预期工作。

最新更新