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
我理解错误信息,它告诉我我没有填写参数。但我只有一个参数,我已经声明它是可选的。看起来代码认为我试图从函数中调用函数?
是什么给出了?
答案 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