首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >升级VBA 6->7导致错误:如果在集合中存在

升级VBA 6->7导致错误:如果在集合中存在
EN

Stack Overflow用户
提问于 2013-04-26 18:43:55
回答 1查看 1K关注 0票数 4

VBA6代码(Excel)工作得很好。升级到Office 2010/VBA7 7,代码中断。

使用SO的代码:

Determining whether an object is a member of a collection in VBA

代码语言:javascript
复制
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中执行其他(新的)方法,这也可以解决问题(我可以梦想)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 19:54:26

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

代码语言:javascript
复制
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

我这样叫它:

代码语言:javascript
复制
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

我第一次打的是真,第二次是假的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16243207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档