Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中调用Sub_Vba_Syntax Error_Call - Fatal编程技术网

在VBA中调用Sub

在VBA中调用Sub,vba,syntax-error,call,Vba,Syntax Error,Call,这是我的简化脚本: 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

这是我的简化脚本:

    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
CATSUBSUBDUKTAREAKUM的调用被标记为红色的“语法错误”。我不明白这个错误。它是一个带有两个参数的简单子程序调用。为什么VBA不接受呼叫?

试试-

Call CatSubProduktAreakum(Stattyp, Daty + UBound(SubCategories) + 2)
至于原因,这是MSDN通过这个问题得出的-

调用过程时不需要使用Call关键字。 但是,如果使用Call关键字调用需要 参数、argumentlist必须用括号括起来。如果你忽略了 对于Call关键字,还必须省略括号 论点列表。如果使用调用语法调用任何内在函数或 如果是用户定义的函数,则该函数的返回值将被丢弃


对于仍在读这篇文章的人,另一个选择是省略括号:

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

    CatSubProduktAreakum Stattyp, Daty + UBound(SubCategories) + 2

End Sub
调用
关键字实际上仅在VBA中用于向后兼容性,实际上并不需要

但是,如果您决定使用
Call
关键字,则必须更改语法以适应

'// With Call
Call Foo(Bar)

'// Without Call
Foo Bar
两者将做完全相同的事情



也就是说,在某些情况下,可能需要注意不必要地使用括号会导致在您不希望的情况下对内容进行评估(正如VBA中的括号所做的那样),因此记住,更好的选择可能是省略
Call
关键字和括号,谢谢,这似乎是可行的。如果我只使用一个参数调用子例程(并且只使用一个参数定义它),那么我可以只使用它的名称(以及括号中的参数)调用它。为什么不能只调用带有两个参数的Sub?@reggie只要跳过括号
Mysub arg1、arg2、arg3
,就可以不调用Sub。但是,您需要阅读ByVal和ByRef。。。。例如,这就是我讨厌VBA的原因。