Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1976|回复: 7

[已解决]为什么部件不一定是对象

[复制链接]
发表于 2010-3-19 12:25 | 显示全部楼层 |阅读模式


Sub test5()
    Dim x As Object
    Dim i As Integer

    Columns(1).Clear


    '遍历abc工程的所有部件
    For Each x In Application.VBE.VBProjects("abc").VBComponents
        i = i + 1
        Cells(i, 1) = x.Name
    Next x

End Sub

Sub test6()

    '返回abc工程中包含多少对象
    MsgBox Application.VBE.VBProjects("abc").Collection.Count    '返回4
    
End Sub

 

运行test5后发现,工程abc中包括5个部件;

运行test6后发现,工程abc中包括4个对象。

如题,谢谢!

最佳答案
2010-3-19 13:23

两个东西是不一样的,可以看到Collection返回的是工程资源管理器里面有多少个东西(包括打开的文件和加载宏之类的),你可以用下面语句来得到验证。

Sub test8()
    Dim x As Object
    Dim i As Integer

    Columns(2).Clear

    For Each x In Application.VBE.VBProjects("abc").Collection
        i = i + 1
        Cells(i, 2) = x.Name
        Cells(i, 3) = x.Description
    Next x

End Sub

而VBComponents返回的是当前abc工程中有多少个东西,即abc工程下面展开后一共多少个东西

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-3-19 13:23 | 显示全部楼层    本楼为最佳答案   

两个东西是不一样的,可以看到Collection返回的是工程资源管理器里面有多少个东西(包括打开的文件和加载宏之类的),你可以用下面语句来得到验证。

Sub test8()
    Dim x As Object
    Dim i As Integer

    Columns(2).Clear

    For Each x In Application.VBE.VBProjects("abc").Collection
        i = i + 1
        Cells(i, 2) = x.Name
        Cells(i, 3) = x.Description
    Next x

End Sub

而VBComponents返回的是当前abc工程中有多少个东西,即abc工程下面展开后一共多少个东西

回复

使用道具 举报

 楼主| 发表于 2010-3-19 15:28 | 显示全部楼层

谢谢阿木!

的确是呀!但感觉这次是被外貌欺骗了[em03],冷不丁看:

 

'   Excel 的VBE的     abc工程   的   集合
Application.VBE.VBProjects("abc").Collection

 

好感和test5作用一样,没想到不是。按实际含义,Application.VBE.Collection,我觉得这样才是,可惜这是不存在的写法。没想到,错这么远。学习了[em11]

回复

使用道具 举报

 楼主| 发表于 2010-3-19 15:44 | 显示全部楼层

对了,从2楼结果看:

VBAProject
VBAProject
VBHtmlMaker
VBAProject

 

如上,不就出现3个同名的了,如何区分?test8的操作变成无意义的了?

[em09]
回复

使用道具 举报

 楼主| 发表于 2010-3-19 16:06 | 显示全部楼层

[已解决]为什么部件不一定是对象

[已解决]为什么部件不一定是对象

我被这个骗了

[em03]
回复

使用道具 举报

发表于 2010-3-19 22:18 | 显示全部楼层

爱疯,你到VBE里面的工具--〉VBproject属性的对话框中可以看到每个工程的名称。
回复

使用道具 举报

 楼主| 发表于 2010-3-19 22:42 | 显示全部楼层

QUOTE:
以下是引用amulee在2010-3-19 22:18:00的发言:
爱疯,你到VBE里面的工具--〉VBproject属性的对话框中可以看到每个工程的名称。

[已解决]为什么部件不一定是对象

[已解决]为什么部件不一定是对象

这里么?

如果我不去修改下,比如改成“abc”,那工程的默认名就不会变。

这样,不就造成很多工程都用一样的默认名VBAProject,也就不好区分了么!

回复

使用道具 举报

发表于 2010-3-20 23:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-16 20:48 , Processed in 0.260524 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表