VBA6代码(Excel)工作得很好。升级到Office 2010/VBA7 7,代码中断。
使用SO的代码:
Determining whether an object is a member of a collection in 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中执行其他(新的)方法,这也可以解决问题(我可以梦想)。
发布于 2013-04-26 19:54:26
我发现,如果我更改指定一个对象,例如一个工作表,它可以:
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我第一次打的是真,第二次是假的。
https://stackoverflow.com/questions/16243207
复制相似问题