2016-02-01 17 views
2

我有三個子例程,有時會連續運行,有時會單獨運行,但會使用相同的參數(「TestNumber」)。我原來的代碼如下所示:自動檢測被自變量調用VS單獨調用子程序?

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 

如果我從Main1開始一直工作到Main3,這很好。 但是,如果我從Main2或Main3開始,兩個腳本都不會運行。相反,系統會提示運行哪個子程序。

有沒有辦法使子程序自動檢測它是用參數調用還是分別調用?

回答

0

可以標記參數爲可選,並提供這樣的默認值:

Sub Main2(Optional TestNumber As String = "") 

,或者你可以將參數更改爲一個變體,將其標記爲可選,然後進行測試,如果使用IsMissing被提供的參數像這樣:

Sub Main2(Optional TestNumber As Variant) 

If IsMissing(TestNumber) Then 
    ' do stuff 
Else 
    ' do other stuff 
+0

非常感謝你=]第一種方法似乎雖然不工作。它不運行,但又提示用戶運行哪個子程序。 –

+0

@MthetheHHui你如何準確運行它? – Rory

+0

'如果TestNumber <> 0然後TestNumber = 1',則用1代替任何需要的值,前提是兩個分支的操作​​過程實際上並不相同。 – Vegard