Вызов сабвуфера в VBA

32

Это мой упрощенный script:

    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 не принимает вызов?

Теги:

2 ответа

60
Лучший ответ

Попробуйте -

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

По этой причине это из MSDN через этот вопрос - Что делает ключевое слово Call в VB6?

При вызове процедуры вам не требуется использовать ключевое слово Call. Однако, если вы используете ключевое слово Call для вызова процедуры, которая требует аргументы, список аргументов должны быть заключены в круглые скобки. Если вы опустите ключевое слово Call, вы также должны опустить круглые скобки вокруг СписокАргументов. Если вы используете синтаксис вызова для вызова любого внутреннего или пользовательская функция, возвращаемое значение функции отбрасывается.

  • 1
    Спасибо, это похоже на работу. Если я вызываю подпрограмму только с одним аргументом (и определяю ее только с одним аргументом), то я могу вызвать ее только по имени (и аргумент в скобках). Почему невозможно просто вызвать Sub с двумя аргументами?
  • 3
    @reggie Вы можете вызывать подпрограмму без Call, если пропустите скобки Mysub arg1,arg2,arg3 Однако вам нужно прочитать об ByVal и ByRef.
Показать ещё 3 комментария
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 и круглые скобки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню