ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: liucqa

VBA高级教程之字典篇,使用类模块实现字典一对多应用

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-1-29 16:40 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
类模块本来就用的很少,大概只有两种情况下才会用到。。。
1、编写应用程序级的过程
应用程序级过程不像工作表级或工作簿级有专门的编程窗口,要编写只能用类模块。
2、窗体控件事件
如果有几百个窗体控件事件,需要同样的代码操作,每一个都要写一段相同代码,麻烦了点,可以用类模块来解决。
如果仅仅定义一个class类,直接放公共模块就好了,没必要用到类模块吧。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-29 18:46 | 显示全部楼层
cliiiiii 发表于 2014-1-29 16:40
类模块本来就用的很少,大概只有两种情况下才会用到。。。
1、编写应用程序级的过程
应用程序级过程不像工 ...

类模块主要目的是为了面向对象编程

TA的精华主题

TA的得分主题

发表于 2014-2-24 09:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
其实我很讨厌将物件放到字典中,
因为取出来后,编译器就不知道他会是什么东西,
也就是,当你取出的物件,其property你要背起来,
是不会自动带出的...
要是取出来后,可以强制转型就好了,就偏偏不行...
或是有像的Java的泛型也不错...(以前都觉得的Java的泛型是让人更麻烦,想不到用了VBA,才让我看清泛型的好处)

点评

泛型是非常有用的的呀,vba就没指望了  发表于 2014-2-24 13:00

TA的精华主题

TA的得分主题

发表于 2014-2-24 13:12 | 显示全部楼层
我搞错了,可以转型别

  1. 'class
  2. Public a As String
  3. Public b As String

  4. 'module
  5. Sub ggg()
  6.    
  7.     Dim a As New Dictionary
  8.     Dim item As New Class1
  9.     item.a = "a"
  10.     item.b = "b"
  11.     a.Add item, ""
  12.     Dim t As Variant
  13.     t = a.Keys
  14.     Dim c As Class1
  15.     Set c = t(0)'转型成功
  16.     Debug.Print c.a
  17.     Debug.Print c.b

  18. End Sub
复制代码
是form物件的,就转不了
  1. Sub gsass()
  2.     Dim a As New Dictionary
  3.     a.Add UserForm1.ListBox1, ""
  4.     a.Add UserForm1.ListBox2, ""
  5.     Dim t
  6.     t = a.Keys
  7.     Dim c As ListBox
  8.     Set c = t(0) '失敗
  9.     Debug.Print c.Name
  10.    
  11.    
  12.    


  13. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-24 13:19 | 显示全部楼层
lolmuta 发表于 2014-2-24 13:12
我搞错了,可以转型别是form物件的,就转不了

Sub gsass()
    Dim a As New Dictionary
    a.Add UserForm1.ListBox1, ""
    Dim t
    t = a.Keys

    Dim c As MSForms.ListBox
    Set c = t(0)    '通过

    Debug.Print c.Name
    Debug.Print TypeName(c)
End Sub

TA的精华主题

TA的得分主题

发表于 2014-2-24 14:01 | 显示全部楼层
liucqa 发表于 2014-2-24 13:19
Sub gsass()
    Dim a As New Dictionary
    a.Add UserForm1.ListBox1, ""

...还有这样的喔...這是bug嗎?
不然前面不加MSFORMS的列表框是谁家的小孩......?@@

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-24 14:51 | 显示全部楼层
lolmuta 发表于 2014-2-24 14:01
...还有这样的喔...這是bug嗎?
不然前面不加MSFORMS的列表框是谁家的小孩......?@@

是excel的            

TA的精华主题

TA的得分主题

发表于 2014-3-5 13:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-3-23 18:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢楼主分享,收藏!

TA的精华主题

TA的得分主题

发表于 2014-3-25 23:29 | 显示全部楼层
经典的例子,学习了,谢谢。!!!!!!!!!1
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 10:44 , Processed in 0.046276 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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