VBA函数 - 参数不可选

时间:2014-05-09 21:14:07

标签: excel vba

Public Function RETURN_Equipment(Optional category As String) As Collection
    Dim config As classConfiguration
    Set config = New classConfiguration

    Dim item As classItem
    Set item = New classItem

    Dim myCollection As Collection
    Set myCollection = New Collection

    For Each config In Configurations
        For Each item In config.colItems
            If IsMissing(category) Then   
                myCollection.add item
            ElseIf InStr(category, "mainframe") <> 0 And item.category = "mainframe" Then
                myCollection.add item
                MsgBox "Fired!"                
            ElseIf category = "accessory" And item.category = "accessory" Then
            Else
            End If
        Next
    Next

    RETURN_Equipment = myCollection
End Function

我一直在

  

编译错误:
  参数不是可选的

我在最后一行得到错误

RETURN_Equipment = myCollection

我理解错误信息,它告诉我我没有填写参数。但我只有一个参数,我已经声明它是可选的。看起来代码认为我试图从函数中调用函数?

是什么给出了?

3 个答案:

答案 0 :(得分:25)

无论何时分配对象,您都需要使用set关键字。

set RETURN_Equipment = myCollection

答案 1 :(得分:7)

我收到此错误是因为我在尝试从函数返回结果时使用了错误的函数名称。我这样做了:

Function MyFuncA(arg as String)
    MyFuncB = arg 'The problem is I'm using MyFuncB instead of MyFuncA
End Function

这是因为我从其他地方复制了一个函数并更改了名称,但没有更改return语句。这不是OP的问题,但我收到了同样的错误信息。

答案 2 :(得分:0)

因为您已将可选参数指定为字符串,所以如果您未指定值,则默认为空字符串。

这意味着它不容错过

如果您将其指定为

Public Function RETURN_Equipment(Optional category) As Collection

这将是一个变体,可能会丢失,虽然你也可以通过传递非字符串变量作为类别参数来搞砸了

最佳行动方案可能是取代

If IsMissing(category) Then 

If category = "" Then 

正如布拉德指出你需要使用Set

Set RETURN_Equipment = myCollection

有关详细信息,请查看此信息 http://msdn.microsoft.com/en-us/library/office/gg251721%28v=office.15%29.aspx