可以select或激活一个可选的参数?

我一直在试图写下一些在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)

有可能使我想要的。

正如你所注意到的,你不能将一个可选参数默认为一个非常量。 但是,如果将参数的variablestypes更改为Variant ,则可以使用IsMissing函数确定是否将值传递给子variables,如果不是,则将其重新分配。

 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 

如果你只是简单地调用或运行Call Populate ,它确定r没有被传递给它,并使用select 。 如果r (在这种情况下是一个或多个单元格的范围)传入子Call Populate(Range("A1:D5")) ,它将使用它。

请参阅IsMissing函数以获取更多信息。

您不能在过程参数中投射对象或分配variables。

这是更好的等待。

定义你的子

 Sub populateSub(r As Range) For Each a In r a = a.Row Next End Sub 

并从另一个子组中调用它。 按照惯例,人们使用一个名为Main的子。

  Sub Main() PopulateSub Selection End Sub