ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 字典和哈希表的一点小发现

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-17 17:08 | 显示全部楼层
qlmgu 发表于 2021-9-17 17:01
wodewan老师您好。很想试用您的程序,但是运行时提示用户定义类型未定义的提示: 要如何定义呢?谢谢。

...

引用一下mscorlib.dll,如果没有,点旁边的浏览按钮到C盘里找mscorlib.tlb image.jpg
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-17 17:16 | 显示全部楼层
qlmgu 发表于 2021-9-17 17:01
wodewan老师您好。很想试用您的程序,但是运行时提示用户定义类型未定义的提示: 要如何定义呢?谢谢。

...

要么引用mscorlib.dll,引用方法审核了,等等看。
要么把as Idictionary删掉或改成object(速度会慢一些)。

TA的精华主题

TA的得分主题

发表于 2021-9-17 17:19 | 显示全部楼层
谢谢wodewan老师指教,我等等看。

TA的精华主题

TA的得分主题

发表于 2021-9-17 21:20 | 显示全部楼层
wodewan 发表于 2021-9-17 17:08
引用一下mscorlib.dll,如果没有,点旁边的浏览按钮到C盘里找mscorlib.tlb

引用后可以使用了,时间可以接受。感谢wodewan 老师的程序。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-17 22:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
qlmgu 发表于 2021-9-17 21:20
引用后可以使用了,时间可以接受。感谢wodewan 老师的程序。

你把那个子程序改成这样,还可以再快一倍,原先时8秒左右,现在是4秒左右,如果解决了3楼那个问题,还可以再快,可惜目前没找到方法。

Sub GetHashTable(arr, Ht As IDictionary) '将单元格的数据添加到哈希表
    Dim i&
    For i = 1 To UBound(arr)
      If Not Ht.Contains(arr(i, 1)) Then Ht.Add arr(i, 1), vbNull
    Next
End Sub
动画.gif

TA的精华主题

TA的得分主题

发表于 2021-9-18 09:15 | 显示全部楼层
wodewan 发表于 2021-9-17 10:35
这个说起来东西有点多。。。。。。
备注一下:下面的代码都是用的前期绑定的方法,所以会自动显示属性方 ...

為什麼我前期綁定後
沒有顯示方法,屬性?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-18 09:54 | 显示全部楼层
chis3 发表于 2021-9-18 09:15
為什麼我前期綁定後
沒有顯示方法,屬性?

如果没猜错的话,你的代码里应该没写这一句:
Dim HT As IDictionary
如下图:
动画.gif

TA的精华主题

TA的得分主题

发表于 2021-9-18 10:49 | 显示全部楼层
wodewan 发表于 2021-9-18 09:54
如果没猜错的话,你的代码里应该没写这一句:
Dim HT As IDictionary
如下图:


用法是否和字典一樣?
另外之前也研究了arraylist
請問arraylist的數據類型是什麼? 因也是沒有顯示屬性方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-18 13:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chis3 发表于 2021-9-18 10:49

用法是否和字典一樣?
另外之前也研究了arraylist

HashTable的用法你可以翻翻上面的帖子和代码。
Arraylist 和这个HashTable来自同一个程序集,mscorlib.dll,其实还有其他一些数据结构:如Stack,Queue,Sortedlist,等等
你可以先认为Arraylis的数据类型是IList,就像上面的HashTable的类型是IDictionary一样。




但其实这种说法并不准确,只是好理解罢了,如果要知道为什么会这样,可不可以设成其他类型等等,那是面向对象的事,我估计我说不清楚,以下内容仅供参考:


首先的了解什么是程序集,接口,类,继承,多态。


1. Excel中从外部加载程序集(好比这里的mscorlib.dll),程序集必须以接口(Interface)的方式暴露给Excel,这样Excle才可以访问这个程序集内的各种方法。


2. 现在接口有了(好比这里的IList,IDictionary,接口基本上以字母 I 开头),但接口里只有方法名,只是告诉使用方如果你继承我就必须自己实现这个功能


3. 这时候,类就出现了(好比这里的HashTable),它实现接口中定义的各种方法的具体逻辑,好比添加要怎么添加,删除要怎么删除。


4. 这样基本就差不多了,接下来实例化一个类,就可以使用了,为什么能把一个具体的类设成接口类型那就时多态了。




评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-9-19 08:02 | 显示全部楼层
wodewan 发表于 2021-9-17 22:02
你把那个子程序改成这样,还可以再快一倍,原先时8秒左右,现在是4秒左右,如果解决了3楼那个问题,还可 ...

谢谢老师精心优化程序和耐心指导,程序确实增速很多。神奇!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-3 00:20 , Processed in 0.031807 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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