ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 字典 d.keys() 出现property let未定义

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-6 17:17 | 显示全部楼层 |阅读模式
本帖最后由 小牛狂奔 于 2012-7-6 17:17 编辑

姓名
年龄
张三
24
李四
56
王五
23


Sub t3()
          Set d = CreateObject("scripting.dictionary")
      Dim x As Integer
      For x = 2 To 4
       d.Add Cells(x, 1).Value, Cells(x, 2).Value
      Next x
   
      MsgBox d.keys(1) '运行到此处出现property let 未定义 property get 未返回对象
      MsgBox d.Count
    End Sub   
请问各位大侠是什么原因

TA的精华主题

TA的得分主题

发表于 2012-7-6 17:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Private Sub CommandButton1_Click()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     Dim x As Integer
  4.     For x = 2 To 4
  5.         d.Add Cells(x, 1).Value, Cells(x, 2).Value
  6.     Next x
  7.    
  8.     k = d.keys
  9.    
  10.     MsgBox k(0)    '运行到此处出现property let 未定义 property get 未返回对象
  11.     MsgBox d.Count
  12. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-7-6 17:32 | 显示全部楼层
似乎msgbox钱的代码没有问题
d.key(1)应该有问题
改成d.key(cells(2,1))试一下,应该是cells(2,2)的值

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-6 17:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原来前面要放个变量   如果加载scrrun.dll 可以不放变量 运行d.keys.(1)

TA的精华主题

TA的得分主题

发表于 2012-7-6 19:18 | 显示全部楼层
本帖最后由 zhaogang1960 于 2012-7-6 19:19 编辑
小牛狂奔 发表于 2012-7-6 17:57
原来前面要放个变量   如果加载scrrun.dll 可以不放变量 运行d.keys.(1)


加载scrrun.dll 就是前期绑定(引用Microsoft Scripting Runtime,Dim d As New Dictionary ),可以使用d.Keys(1)
后期绑定(不引用,Set d = CreateObject("scripting.dictionary"),使用2楼shaowu459 版主的方法

Sub t3()
'    Set d = CreateObject("scripting.dictionary")
    Dim d As New Dictionary '引用Microsoft Scripting Runtime
    Dim x As Integer
    For x = 2 To 4
        d.Add Cells(x, 1).Value, Cells(x, 2).Value
    Next x
   
    MsgBox d.Keys(1)
    MsgBox d.Count
End Sub

TA的精华主题

TA的得分主题

发表于 2021-2-21 20:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2012-7-6 19:18
加载scrrun.dll 就是前期绑定(引用Microsoft Scripting Runtime,Dim d As New Dictionary ),可以使用 ...

VBA的字典真实高深莫测啊!!!

TA的精华主题

TA的得分主题

发表于 2021-2-22 00:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
前期绑定(即 引用scrrun.dll) : d.keys(1)
后期绑定(即 d = CreateObject("scripting.dictionary")): d.keys()(1),要多加一个括号才行

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-5-1 21:41 | 显示全部楼层
zjzyj 发表于 2021-2-22 00:08
前期绑定(即 引用scrrun.dll) : d.keys(1)
后期绑定(即 d = CreateObject("scripting.dictionary")) ...

虽然是基础知识点,但是让我恍然大悟,茅塞顿开,不但对前期绑定和后期绑定的区别有了更加深刻的理解,而且对其用法也更加游刃有余了。
真的是听君一席话,胜读十年书,给你点赞!!!

TA的精华主题

TA的得分主题

发表于 2022-11-23 23:08 | 显示全部楼层
本帖最后由 xiaomi123ok 于 2022-11-24 08:50 编辑


       MsgBox d.keys()(1) '''在这里加个空()就行了
      
亲测,在Excel2010版本上能正常运行。不知道为什么,还请高手指点。


补充内容 (2022-12-14 12:08):
经过高人指点,我有点明白了:d.keys()已经把数据转换成数组了,后面的(1)指第一个元素

TA的精华主题

TA的得分主题

发表于 2022-11-23 23:09 | 显示全部楼层
本帖最后由 xiaomi123ok 于 2022-11-24 08:46 编辑

7楼zjzyj,老师,能解释一下为什么吗?“在后面加一个空括号”


“前期绑定(即 引用scrrun.dll) : d.keys(1)
后期绑定(即 d = CreateObject("scripting.dictionary")): d.keys()(1),要多加一个括号才行”

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 22:26 , Processed in 0.039524 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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