VBA编程技巧 之 字典对象使用经验谈

VBA编程技巧 之 字典对象使用经验谈

ID:37898520

大小:190.50 KB

页数:22页

时间:2019-06-02

VBA编程技巧 之 字典对象使用经验谈_第1页
VBA编程技巧 之 字典对象使用经验谈_第2页
VBA编程技巧 之 字典对象使用经验谈_第3页
VBA编程技巧 之 字典对象使用经验谈_第4页
VBA编程技巧 之 字典对象使用经验谈_第5页
资源描述:

《VBA编程技巧 之 字典对象使用经验谈》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、VBA编程技巧之字典对象使用经验谈(更新至四之一)字典对象使用经验谈目录前言_______________________________________01楼一、字典的基本功能___________________________01楼二、TheHardcoreofDictionary__________________02楼二之一、多层字典对象应用案例分析1_____________16楼二之二、多层字典对象应用案例分析2_____________30楼三之一、动态的树形数据结构的构建________________35楼

2、三之二、动态树形结构的遍历____________________54楼三之三、送你把漂亮的解牛小刀___________________64楼三之四、上帝的归上帝,凯撒的归凯撒______________66楼四之一、利用字典动态的构建自定义数据类型___________68楼前言相信大家对字典对象已经是耳熟能详了。现在帮人写个代码如果不来个字典,出门都不好意思和人打招呼。EH里也有大量的帖子详尽的介绍了字典对象的功能和各种使用方法,我大致翻过这些帖子,感觉很有必要和大家交流一下最近一段时间泡坛子、帮人家写代码得到的一些心得

3、体会。可能更多的会聊一些编程思路的东西,所以我想这篇文章应该是给有一定基础的朋友看的,起码应该能不需要注释就能看懂代码,起码应该看过置顶贴里提到的那些帖子。一、字典的基本功能  相信字典对象最为出名的是它的关键字不重复特性,我们经常会看到这样的语句:Fori=0toUBound(arr)  dic(arr(i,1))=""Next这段语句唯一的作用就是将数组的第一列数据去掉了重复项。但值得强调的是既然我们叫它字典对象,那么它就理所应当的具有翻译功能。以一个典型的EXCEL数据表为例,很多情况下会是类似于一个数据库中表这样的一个

4、结构,即具有第一行的表头部分定义了每一列的内容是什么,其下每一行都是一条单独的纪录。那么这种情况下,我们完全可以用字典对象来创建由表头来翻译索引列号。这至少带来两个好处,1、使得你的代码更具有可看性,或则说更像自然语言;2、使得你的代码不会依赖于表格的地理位置,也就是说即便出于某种原因列的顺序有了变动,你也不需要去找出你的代码里涉及到相应列号并逐一改正。其实,更重要的一点,是你的代码会具有更大的适用性。让我们来比较两段代码,设想我们需要读取一个月工资表并统计各班组的绩效奖金,其包含姓名、班组、工位、基本工资、绩效奖金等等信息,

5、那么可能的代码会是这样的:复制内容到剪贴板代码:Dimdic,arr,i&,lRow&lRow=Sheet1.[a65536].End(xlUp).Rowarr=Sheet1.Range("a2:e"&lRow)Setdic=CreateObject("Scripting.Dictionary")Fori=1ToUBound(arr)  dic(arr(i,2))=dic(arr(i,2))+dic(arr(i,5))Next'=================DimdTitle,arr,i&,dicarr=Sheet1.[a

6、1].CurrentRegionSetdTitle=CreateObject("Scripting.Dictionary")Fori=1ToUBound(arr,2)  dTitle(arr(1,i))=22iNextSetdic=CreateObject("Scripting.Dictionary")Fori=2ToUBound(arr)  dic(arr(i,dTitle("班组")))=dic(arr(i,dTitle("班组")))+arr(i,dTitle("绩效奖金"))Next第二段代码我们使用了一个名为dTit

7、le的字典对象来记录表头名称和对应列号,这样当我们需要使用某列数据的时候,我们可以使用这个对象来将表头名翻译成列号。很明显的是第一段代码完全依赖于表格内容的地理位置,而且如果不去看数据表的话,你根本不知道它在干什么。而相应的,对于第二段代码而言,我们完全可以不用去了解数据表是什么样的,只需要知道它有这样的两个表头就可以了。并且你不觉得它很接近自然语言了吗?哦,不吗,你确定?那我再稍微改一下:复制内容到剪贴板代码:数据=Sheet1.[a1].CurrentRegionSet表头之列号=CreateObject("Scripti

8、ng.Dictionary")Fori=1ToUBound(数据,2)  表头之列号(数据(1,i))=iNextSet班组绩效奖金=CreateObject("Scripting.Dictionary")Fori=2ToUBound(数据)  班组名=数据(i,表头之列号(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。