vba引用Dictionary对象,报错误457解决办法

mamahahayuyu 2018-12-21 10:46:46
vba引用DICTIONARY对象的add方法添加关键字提示“运行时错误457,提示该关键字已经与集合中的一个元素相关” 解决办法: 1.从对象浏览器查看引用的Dictionary属于哪个类库,Excel应该用Scripting类库的 2.查找有无同样名称的Dictionary对象 3.如果都找了确定没问题,那么在程序开始加上APPLICATION.SCREENUPDATING=FALSE ON ERROR RESUME NEXT,程序结尾处重置屏幕更新就解决了。 亲身经历,血的教训。希望能帮到大家。
...全文
1401 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hinfa 2018-12-26
  • 打赏
  • 举报
回复
引用 4 楼 milaoshu1020 的回复:
错了,应该这样改:
dim dict as new dictionary
' ...
if dict.exists(key) then
msgbox key & "已经存在!"
dict.item(key) = value ' 可选
else
call dict.add(key,value) ' 增加个Call,或者去掉括号也可以.
end if
' ...
VBA不需要打call!
milaoshu1020 2018-12-24
  • 打赏
  • 举报
回复
错了,应该这样改:
dim dict as new dictionary
' ...
if dict.exists(key) then
msgbox key & "已经存在!"
dict.item(key) = value ' 可选
else
call dict.add(key,value) ' 增加个Call,或者去掉括号也可以.
end if
' ...
milaoshu1020 2018-12-24
  • 打赏
  • 举报
回复
应该这样改:
dim dict as new dictionary
' ...
if dict.exists(key) then
msgbox key & "已经存在!"
dict.item(key) = value ' 可选
else
dict.add(key,value)
end if
' ...

threenewbee 2018-12-22
  • 打赏
  • 举报
回复
字典的key本来就是唯一的,有什么奇怪的。
舉杯邀明月 2018-12-22
  • 打赏
  • 举报
回复
呵呵,你觉得你这个所谓“教训”能对别人有帮助?
拉倒吧…………


对于“第1”:一般用Dictionary对象,都是用系统提供的Scripting类库中的 Dictionary类。
  若有特殊需求,才可能自己实现,或者引用别的类库中的实现。

对于“第2”:一般来说,不同作用或在不同作用域中的“特定变量”,变量名都不同的。
  代码中“有无同样名称的Dictionary对象”,自己难道不清楚?还需要找么…………

对于“第3”:
  APPLICATION.SCREENUPDATING=FALSE 基本上仅用于在Excel的VBA中使用。
  如果被操作的工作表本身就没在“前台”,或者本来就是“不可见”的(比如我用VB6代码,通过
COM接口操作Excel的工作表),这句代码恐怕就没有实质作用。
  最主要的,On Error Resume Next 并不是“用于解决 运行时错误457”的!
  你这次的使用,似乎“解决问题”了,也许只是“巧合”、刚好能符合你的预期而已!
  但别人也许需求完全不同,需要“切实处理”这种关键字重复问题时,
岂能简单用个的“On Error Resume Next”去“忽视运行时异常”就行???
实际需求不同,处理方式并不是“相同”的,你说的这个方法根本不具备通用性,
并且,我也不觉得你的应用场景中“On Error Resume Next”唯一的方法,而是有“更好”的方法!

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧