我正在尝试编写一个将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
这不编译。它抛出错误“需要常量表达式。”
答案 0 :(得分:5)
检查参数是否在函数内部传递,如果没有则将其设置在那里。
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
答案 1 :(得分:3)
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
在某些情况下,将范围或字符串传递给函数的灵活性可能很有用。例如,您可以将命名范围的名称直接传递给函数,并使其按预期工作。
答案 2 :(得分:3)
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
定义默认值