2011-10-10 59 views
32

這是我的簡單腳本子:調用在VBA

Sub SomeOtherSub(Stattyp As String) 
     'Daty and the other variables are defined here 

     CatSubProduktAreakum(Stattyp, Daty + UBound(SubCategories) + 2) 

    End Sub 

    Sub CatSubProduktAreakum(Stattyp As String, starty As Integer) 

    'some stuff 

    End Sub 

CatSubProduktAreakum的呼叫被標記爲紅色的「語法錯誤」。我不明白這個錯誤。這是一個帶有兩個參數的簡單子例程調用。爲什麼VBA不接受電話?

回答

60

嘗試 -

Call CatSubProduktAreakum(Stattyp, Daty + UBound(SubCategories) + 2) 

至於原因,這從MSDN通過這個問題 - What does the Call keyword do in VB6?

您不需要調用過程時使用Call關鍵字。 但是,如果使用Call關鍵字調用需要 參數的過程,則參數列表必須括在圓括號中。如果省略了呼叫關鍵字 ,則還必須省略參數列表 附近的括號。如果使用Call語法調用任何內部或用戶定義的函數,則函數的返回值將被丟棄。

+1

謝謝,這似乎工作。如果我只用一個參數來調用子程序(並且只用一個參數來定義它),那麼我可以通過其名稱(和括號中的參數)來調用它。爲什麼只用兩個參數調用Sub是不可能的? – reggie

+3

@reggie只要你跳過括號'Mysub arg1,arg2,arg3',你就可以調用一個沒有調用的sub。但是,你需要閱讀ByVal和ByRef。 – Fionnuala

+0

我已經用更全面的解釋更新了答案。 – ipr101

5

對於任何人還是會來這個帖子,另一種選擇是簡單地省略括號:

Sub SomeOtherSub(Stattyp As String) 
    'Daty and the other variables are defined here 

    CatSubProduktAreakum Stattyp, Daty + UBound(SubCategories) + 2 

End Sub 

Call關鍵字是唯一真正在VBA的向後兼容性和實際上是不需要的。

如果但是,您決定使用Call關鍵字,那麼你必須改變你的語法來適應。

'// With Call 
Call Foo(Bar) 

'// Without Call 
Foo Bar 

兩者都會做同樣的事情。


話雖這麼說,可能在有些情況需要注意的地方用括號不必要將使事情進行評估,你不打算他們是(括號內爲做到這一點在VBA),以便與在更好的選擇可能是省略Call關鍵字和括號