我的印象是,如果已使用一些可选参数定义了函数,则可以通过Nothing它,并且将其与“完全不传递任何东西”一样对待。
但是,我无法做到这一点。如果所有“ fds ...”变量都不为空,则以下代码片段可以很好地运行,但是如果有任何参数,则抛出“无效的过程调用或参数”Nothing:
Dim fdsSortOrders(2) As Variant
Dim fdsKey1 As Variant
Dim fdsKey2 As Variant
Dim fdsKey3 As Variant
' ...skipped...
Call loFinalReport.DataBodyRange.Sort( _
Header:=xlYes, _
Key1:=fdsKey1, Order1:=fdsSortOrders(0), _
Key2:=fdsKey2, Order2:=fdsSortOrders(1), _
Key3:=fdsKey3, Order3:=fdsSortOrders(2) _
)
Run Code Online (Sandbox Code Playgroud)
有没有办法传递Optional参数,或者我应该制作难看的复制粘贴代码(“ if fdskey2 is nothing and fdskey3 is Nothing Then SortUsingKey1Only)?
更新
这将起作用,因为Key2 / Key3和Order2 / Order3是可选的,但是我不想编写过程调用的三个版本:
Call loFinalReport.DataBodyRange.Sort( _
Header:=xlYes, _
Key1:=fdsKey1, Order1:=fdsSortOrders(0) _
)
Run Code Online (Sandbox Code Playgroud)