【问题标题】:Calling a Sub in VBA在 VBA 中调用 Sub
【发布时间】:2011-12-04 15:05:32
【问题描述】:

这是我的简化脚本:

    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 不接受调用?

【问题讨论】:

    标签: vba syntax-error call


    【解决方案1】:

    试试 -

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

    至于原因,这来自 MSDN 通过这个问题 - What does the Call keyword do in VB6?

    调用过程时不需要使用 Call 关键字。 但是,如果您使用 Call 关键字来调用需要 arguments,argumentlist 必须用括号括起来。如果你省略 Call 关键字,您还必须省略括号 论据列表。如果您使用任一调用语法来调用任何内在或 用户自定义函数,函数的返回值被丢弃。

    【讨论】:

    • 谢谢,这似乎有效。如果我只用一个参数调用子例程(并且只用一个参数定义它),那么我可以只用它的名称(以及括号中的参数)来调用它。为什么不能只调用带有两个参数的 Sub?
    • @reggie 只要跳过方括号Mysub arg1,arg2,arg3,您就可以在不调用的情况下调用 sub。但是,您需要阅读 ByVal 和 ByRef。
    • 这就是我讨厌 VBA 的原因。
    【解决方案2】:

    对于仍在阅读这篇文章的任何人,另一种选择是简单地省略括号:

    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 关键字和括号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多