excel 可不可以在VBA类模块里设置动态数组作为属性,然后在标准模块中给这个动态数

 我来答
unsamesky
2013-10-13 · TA获得超过2736个赞
知道小有建树答主
回答量:859
采纳率:100%
帮助的人:439万
展开全部

类模块的编写跟日常写代码的编程思想有很大反差,类模块的主题是创建,而日常的代码是使用。

类模块里是禁止使用Public类型的动态数组作为模块级变量的,而私有级的变量外界不可直接调用,那么也失去了数组的意义。

因为通过类模块创建的实例,我们通常称之为对象,而纵观Applicaiton集合对象,Range集合对象,Addins集合对象,等等各种对象,似乎官方总会给予一个“集合”概念。实际上,这里的“集合”就相当于一个动态数组,比如WorkBooks(1)就返回第一个工作簿,WorkSheets(2)就返回第二个工作表,这个不正是动态数组所需要表达的意义么!?

 

所以,建议你尝试使用Collect对象,来实现类似于动态数组的功能。给你一个参考示例:

Rem -==巴蜀兄弟连==-  团队提供支持
Public Arr As New Collection
Public Function Add(ByRef R As Range) As Range
    Set Add = R   '创建对参数R对应单元格的引用
    Arr.Add Add   '将建立的引用实例添加到Arr集合
End Function

然后标准模块创建实例,并返回集合元素的值:

Private mm As New unsamesky   '创建类模块unsamesky的一个实例mm
Private Sub xx()
    Dim i As Long
    For i = 1 To 10
        mm.Add Sheet1.Cells(i, 1)   '给A1到A10单元格添加到mm实例的Arr集合中
    Next
End Sub
Sub yy()
    Call xx    '调用xx
    MsgBox mm.Arr(3)    '试试返回集合的第3个元素,也就是工作表的第A3单元格的内容!
End Sub

可使用附件测试:

黄小涛101
2013-10-13 · TA获得超过207个赞
知道小有建树答主
回答量:523
采纳率:0%
帮助的人:336万
展开全部
建议你还是先去学一下类模块的入门比较好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式