ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 两种引用字典方式为什么会存在功能差异?

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-22 17:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:数组集合和字典
香川群子 发表于 2013-11-22 17:11
据说某些高手的经验是:

1. 自己用的代码就前期绑定、给别人写代码就一定要用后期绑定(确保代码通用性) ...

是这么回事,但当字典嵌套时,使用d.keys(i)这种形式就很方便,比如d(d.kyes(i)).keys(i)。

TA的精华主题

TA的得分主题

发表于 2013-11-22 18:09 | 显示全部楼层
实际上,最清晰的写法就是dict.Keys()(1)。
这种写法非常清晰地表明了代码进行的操作——调用keys函数,得到一个对象,然后通过索引访问这个对象的元素。

如果你是用C#这样的语言的话,就必须这么写,因为C#(以及其他很多语言)在调用函数时必须使用括号。
而VB6,众所周知,在调用函数时可以省略括号。那么把函数调用的括号省略掉,就成了大家常用的dict.keys(1)。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-11-22 18:35 | 显示全部楼层
这个插件应该就是用C#编写的,我学过TC没学过C#,看起来知识面还是太窄了。

TA的精华主题

TA的得分主题

发表于 2013-11-23 16:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2013-11-22 17:11
据说某些高手的经验是:

1. 自己用的代码就前期绑定、给别人写代码就一定要用后期绑定(确保代码通用性) ...

加括号的方法以前没见有人提到过,在书写上有便利;
香川老师说的,我们常用的是先数组化,再引用,如果只用一次,书写麻烦,如果批量引用,估计数组化应该效率高,是不是相当于  With sheet1的效果

TA的精华主题

TA的得分主题

发表于 2013-12-26 09:18 | 显示全部楼层
PLINQ 发表于 2013-11-22 16:19
是vba在缺少类型信息时语法解析上的一些问题。
从错误信息上来看,在缺少类型信息时,VBA似乎是把dict.Key ...

谢谢分享,学习了!

TA的精华主题

TA的得分主题

发表于 2013-12-26 13:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
前期绑定对象的运行效率比后期绑定的效率要高的多,特别是在数据多的情况下两者的差别很大。
前期绑定对象可以方便使用对象的方法,属性和对象内置常数。

TA的精华主题

TA的得分主题

发表于 2015-5-31 11:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
开眼界了,谢谢各位大侠

TA的精华主题

TA的得分主题

发表于 2015-6-27 17:21 | 显示全部楼层
在您上面的程序里面加了一个打印,想取字典里面的关键字, 但是使用 d.keys(2) 打印提示出错:
“运行时错误‘‘438’’”
对像不支持该属性或方法
难道只能先把它放进数组里面再取吗?

Private Sub CommandButton1_Click()
'Dim d As New Dictionary
  Dim d As Object
  Set d = CreateObject("scripting.dictionary")
  Dim i As Integer
  For i = 1 To 10
    d(i) = i + 20
  Next
  Sheet1.[b2].Resize(d.Count, 2) = Application.Transpose(Array(d.keys, d.items))
  For i = 1 To 10
    MsgBox d.Key(i)
  Next i
End Sub

TA的精华主题

TA的得分主题

发表于 2016-12-14 22:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-12-14 22:06 | 显示全部楼层
本人在学习数组时,遇到赋值时类型不匹配的问题,百思不得其解,请老师解惑!谢谢
http://club.excelhome.net/thread-1312572-1-1.html
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-13 10:11 , Processed in 0.033332 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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