Vba 自动检测使用参数调用与单独调用子例程?
我有三个子例程,有时连续运行,有时单独运行,但将使用相同的参数(“TestNumber”)。我的原始代码如下所示:Vba 自动检测使用参数调用与单独调用子例程?,vba,excel,subroutine,Vba,Excel,Subroutine,我有三个子例程,有时连续运行,有时单独运行,但将使用相同的参数(“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
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
那么,我认为每次调用重新输入TestNoice都会有点麻烦和风险,所以我将代码更改为:
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
如果我从Main1开始一直工作到Main3,这就可以了。
但如果我从Main2或Main3开始,两个脚本都不会运行。相反,系统会提示运行哪个子例程
是否有一种方法可以让子例程自动检测它是用参数调用还是单独调用?您可以将参数标记为可选,并提供如下默认值:
Sub Main2(Optional TestNumber As String = "")
Sub Main2(Optional TestNumber As Variant)
If IsMissing(TestNumber) Then
' do stuff
Else
' do other stuff
或者,您可以将参数更改为变量,将其标记为可选,然后测试是否使用以下方法提供了参数:
Sub Main2(Optional TestNumber As String = "")
Sub Main2(Optional TestNumber As Variant)
If IsMissing(TestNumber) Then
' do stuff
Else
' do other stuff
非常感谢=]第一种方法似乎不起作用。它不会运行,但会再次提示用户为哪个子例程运行。@Matthewui您是如何准确地运行它的?
如果TestNumber为0,则TestNumber=1
,用1替换所需的任何值,假设这两个分支的操作过程实际上并没有什么不同。这似乎是Visual Basic编辑器的一个限制-您不能直接运行所有参数都是可选的Sub,即使您可以从即时窗口或其他Sub/函数调用它