4

VBA6 代码 (Excel) 效果很好。升级到 Office 2010/VBA7,代码中断。

使用来自 SO 的代码:

确定对象是否是 VBA 中集合的成员

Public Function Contains(col As Collection, key As Variant) As Boolean
Dim obj As Variant
On Error GoTo err
    Contains = True
    obj = col(key)
    Exit Function
err:

    Contains = False
End Function

我得到运行时错误 5:无效的过程调用或参数。

这对我来说没有意义,因为错误发生在语句obj = col(key)应该涵盖的行上On Error GoTo err,但它停止了。

其他如果 X 存在于集合类型的解决方案中也有同样的问题。

而不是修复损坏的代码,我真正需要的是能够查看是否已经为集合设置了记录,如果可以在 VBA7 中以其他(新)方式完成,那也可以解决问题(我可以做梦)。

4

1 回答 1

2

我发现如果我更改指定一个对象,例如一个工作表,它会起作用:

Public Function Contains(col As Collection, key As Variant) As Boolean
Dim ws As Excel.Worksheet

On Error GoTo err
Contains = True
Set ws = col(key)
Exit Function
err:
Contains = False
End Function

我这样称呼它:

Sub test()
Dim ws As Excel.Worksheet
Dim coll As Collection

Set coll = New Collection
For Each ws In ThisWorkbook.Worksheets
coll.Add ws, ws.Name
Next ws
Debug.Print Contains(coll, ActiveSheet.Name)
Debug.Print Contains(coll, "not a worksheet name")
End Sub

第一次调用我得到 True,第二次调用得到 False。

于 2013-04-26T19:54:26.967 回答