我有三个子例程,有时连续运行,有时单独运行,但会使用相同的参数("TestNumber"(。我的原始代码如下所示:
Sub Main1()
Dim TestNumber As String
TestNumber = InputBox("Please enter TestNumber")
' Some codes running on TestNumber
' Prompt users whether to continue to Main2
Dim Continue As String
Continue = MsgBox("Continue to Main2?", vbYesNo)
If Continue = vbYes Then
Call Main2
Else
End If
End Sub
Sub Main2() ' Similar to Main1, just that it will prompt if user wants to continue to Main3
Dim TestNumber As String
TestNumber = InputBox("Please enter TestNumber")
' Some codes running on TestNumber
Dim Continue As String
Continue = MsgBox("Continue to Main3?"), vbYesNo)
If Continue = vbYes Then
Call Main3
Else
End If
End Sub
Sub Main3() ' The last call of the series
Dim TestNumber As String
TestNumber = InputBox("Please enter TestNumber")
'Some codes running on TestNumber
End Sub
然后,我认为每次调用重新输入 TestNumber 有点麻烦和风险,所以我将我的代码更改为:
Sub Main1()
Dim TestNumber As String
TestNumber = InputBox("Please enter TestNumber")
' Some codes running on TestNumber
' Prompt users whether to continue to Main2
Dim Continue As String
Continue = MsgBox("Continue to Main2?", vbYesNo)
If Continue = vbYes Then
Call Main2(TestNumber)
Else
End If
End Sub
Sub Main2(TestNumber As String) ' Similar to Main1, just that it will prompt if user wants to continue to Main3
If TestNumber = "" Then
TestNumber = InputBox("Please enter TestNumber")
Else
End If
' Some codes running on TestNumber
Dim Continue As String
Continue = MsgBox("Continue to Main3?"), vbYesNo)
If Continue = vbYes Then
Call Main3(TestNumber)
Else
End If
End Sub
Sub Main3(TestNumber As String) ' The last call of the series
If TestNumber = "" Then
TestNumber = InputBox("Please enter TestNumber")
Else
End If
' Some codes running on TestNumber
End Sub
如果我从 Main3 开始一直工作到 Main1,这就可以了。但是如果我从 Main2 或 Main3 开始,两个脚本都无法运行。相反,系统会提示要运行的子例程。
有没有办法让子例程自动检测它是用参数调用还是单独调用?
您可以将参数标记为可选,并提供默认值,如下所示:
Sub Main2(Optional TestNumber As String = "")
或者,您可以将参数更改为变体,将其标记为可选,然后测试参数是否使用 IsMissing 提供,如下所示:
Sub Main2(Optional TestNumber As Variant)
If IsMissing(TestNumber) Then
' do stuff
Else
' do other stuff