ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2713|回复: 13

[求助] vba面向对象该怎么写?-比如老师(类)包含多个学生(类)集合的属性

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-22 20:28 | 显示全部楼层 |阅读模式
本帖最后由 damnedvi 于 2019-10-22 21:09 编辑

比如老师类 private name as string
private p_students as Collection  '不知道这个是不是这样写,一般的java之类的可以定义一个student的List之类的
....

    Public Property Get students() As Collection
         If p_students Is nothing Then
            Set p_students = New Collection
        End If
      set students = p_students
    End Property

    Function add_student(stu As Student)  'Student为自定义的类
        If p_students Is nothing Then
            Set p_students = New Collection
        End If
            p_students .Add stu

    End Function


--------------------------------------
测试
Sub test()
    Dim teacher  As Teacher
    Dim stu1, stu2 As Student
    Dim s As String
    Dim col As Collection

    Set stu1 = New Student
    stu1.year = "2019"
    stu1.name = "张三"


    Set stu2 = New Student
    stu2.year = "2019"
    stu2.name= "李四"

    Set teacher = New Teacher
    teacher.name = "李老师"
   Call teacher.add_student(stu1)
   Call teacher.add_student(stu2)

end sub



因为临时帮一个朋友弄一点东西,没啥vba的基础,问下大神有没例子参考下这类问题vba咋解决,VBA中集合类只有 collection 和 字典么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-22 20:44 | 显示全部楼层
Call teacher.add_student(stu1)   提示 byref 参数类型不符

TA的精华主题

TA的得分主题

发表于 2019-10-22 20:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
要以這種層級的類
用implement

TA的精华主题

TA的得分主题

发表于 2019-10-23 07:32 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
能问下,为啥要用类吗?

TA的精华主题

TA的得分主题

发表于 2019-10-23 07:48 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-23 07:58 | 显示全部楼层
zpy2 发表于 2019-10-23 07:32
能问下,为啥要用类吗?

数据有点复杂  想用类封装下  可能是惯性思维吧 !  调试了一下可以用了,问题出在 Dim stu1, stu2 As Student ,stu1我这里没有显示的把它定义为 Student类 ,系统一直报类型不符错误 ,现在可以用了

TA的精华主题

TA的得分主题

发表于 2019-10-23 08:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
vb本身就不是面向对象,何况VBA。
你的这个需求,其实可以用自定义数据类型解决,如果涉及到自定义动作、事件,才需要涉及到类

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-23 09:32 | 显示全部楼层
本帖最后由 damnedvi 于 2019-10-23 09:43 编辑
lsdongjh 发表于 2019-10-23 08:26
vb本身就不是面向对象,何况VBA。
你的这个需求,其实可以用自定义数据类型解决,如果涉及到自定义动作、 ...

嗯  应该是吧。这个问题解决了,自己没基础,一点小问题造成的。自定义数据类型(老师)里再定义一个自定义类型(学生)的集合,这处理起来容易么?

TA的精华主题

TA的得分主题

发表于 2019-10-23 09:51 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
damnedvi 发表于 2019-10-23 09:32
嗯  应该是吧。这个问题解决了,自己没基础,一点小问题造成的。自定义数据类型(老师)里再定义一个自定 ...

http://wapiknow.baidu.com/question/20830229

可以用type来定义数据类型
类也可以,搜一下吧,也不少。

TA的精华主题

TA的得分主题

发表于 2019-10-23 14:00 | 显示全部楼层
damnedvi 发表于 2019-10-23 09:32
嗯  应该是吧。这个问题解决了,自己没基础,一点小问题造成的。自定义数据类型(老师)里再定义一个自定 ...
  1. Option Explicit

  2. Type Student
  3.     strName As String
  4.     intOld As Integer
  5. End Type

  6. Type Teacher
  7.     strName As String
  8.     strClassName As String
  9.     sdStudent As Student
  10. End Type

  11. Sub test()
  12.     Dim mySd As Student
  13.     Dim myTc As Teacher
  14.    
  15.     With mySd
  16.         .strName = "张三"
  17.         .intOld = 18
  18.     End With
  19.    
  20.     With myTc
  21.         .strName = "李老师"
  22.         .strClassName = "五班"
  23.         .sdStudent = mySd
  24.     End With
  25.    
  26.     MsgBox myTc.sdStudent.strName
  27. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 10:33 , Processed in 0.043933 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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