gpt4 book ai didi

vba - 子例程将无法编译

转载 作者:行者123 更新时间:2023-12-04 16:57:56 24 4
gpt4 key购买 nike

我正在使用Access VBA,并且不断

Compile error: Argument not optional


每当我尝试将集合传递给函数时。到底是怎么回事?
Private Sub btnTest_Click()
Dim GarbageLanguages As New Collection
GarbageLanguages.Add "VBA"
PrintCollectionCount (GarbageLanguages) '<-- error happens here
End Sub

Public Sub PrintCollectionCount(c As Collection)
Debug.Print c.Count
End Sub

最佳答案

简短答案

从以下行中删除括号:

PrintCollectionCount (GarbageLanguages)

长答案

无论好坏(大多数情况下更糟),VBA都具有函数和子例程:
  • 函数-必须返回值
  • 的表达式
  • 子例程-无法返回值
  • 的语句

    不幸的是,使用它们每个都需要稍微不同的语法。令人惊讶的是,这不是有效的子例程调用:
    Subroutine(arguments)

    相反,您需要使用以下两个选项之一:
    Call Subroutine(arguments)
    Subroutine arguments

    更不幸的是,当您使用错误的语法时,您得到的只是极其隐蔽的错误消息。最后,也很难习惯不使用括号,因为作为原始类型而不是对象的单个参数实际上可以正常工作:
    Subroutine(SomeString)                ' works
    Subroutine(SomeInteger) ' works
    Subroutine(SomeObject) ' does not work
    Subroutine(SomeString, SomeInteger) ' does not work

    除了记住可怕的错误消息外,您还可以尝试训练自己寻找在子例程名称后自动插入空格的时间。这:
    Subroutine(argument)

    更改为此:
    Subroutine (argument)  '<-- RED FLAG

    关于vba - 子例程将无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48817661/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com