Selection 或 ActiveRange 可以是可选参数吗?
Can be Selection or ActiveRange an optional parameter?
我一直在尝试为 excel 在 VBA 中写下一些代码片段。
我试着做这个:
Sub populate(Optional ByVal r As Range = Selection)
'
' This only populates a selected range with each row number
'
Dim a As Range
For Each a In r
a = a.Row
Next
End Sub
但是当我 运行 它说我必须使可选参数必须是常量。当我称它为 populate(Selection)
或 populate(ActiveRange)
时相同
有可能做出我正在尝试的东西。
您不能在过程参数中转换对象或分配变量。
最好稍等片刻。
定义你的子
Sub populateSub(r As Range)
For Each a In r
a = a.Row
Next
End Sub
并从另一个子调用它。按照惯例,人们使用一个名为 Main
.
的 sub
Sub Main()
PopulateSub Selection
End Sub
如您所见,您不能将可选参数默认为非常量。但是,如果将参数的变量类型更改为 Variant,则可以使用 IsMissing
函数来确定值是否已传递给 sub,如果没有则重新分配它。
Sub Populate(Optional r As Variant)
If IsMissing(r) Then Set r = Selection
Dim a As Range
For Each a In r
a = a.Row
Next
Set r = Nothing
End Sub
如果简单的调用or运行Call Populate
,则判断r没有传给它,使用Selection。如果 r(在本例中是一个或多个单元格的范围)像 Call Populate(Range("A1:D5"))
一样被传递到 sub 中,它会使用它。
有关详细信息,请参阅 IsMissing function。
我一直在尝试为 excel 在 VBA 中写下一些代码片段。 我试着做这个:
Sub populate(Optional ByVal r As Range = Selection)
'
' This only populates a selected range with each row number
'
Dim a As Range
For Each a In r
a = a.Row
Next
End Sub
但是当我 运行 它说我必须使可选参数必须是常量。当我称它为 populate(Selection)
或 populate(ActiveRange)
有可能做出我正在尝试的东西。
您不能在过程参数中转换对象或分配变量。
最好稍等片刻。
定义你的子
Sub populateSub(r As Range)
For Each a In r
a = a.Row
Next
End Sub
并从另一个子调用它。按照惯例,人们使用一个名为 Main
.
Sub Main()
PopulateSub Selection
End Sub
如您所见,您不能将可选参数默认为非常量。但是,如果将参数的变量类型更改为 Variant,则可以使用 IsMissing
函数来确定值是否已传递给 sub,如果没有则重新分配它。
Sub Populate(Optional r As Variant)
If IsMissing(r) Then Set r = Selection
Dim a As Range
For Each a In r
a = a.Row
Next
Set r = Nothing
End Sub
如果简单的调用or运行Call Populate
,则判断r没有传给它,使用Selection。如果 r(在本例中是一个或多个单元格的范围)像 Call Populate(Range("A1:D5"))
一样被传递到 sub 中,它会使用它。
有关详细信息,请参阅 IsMissing function。