vba參考DICTIONARY物件的add方法添加關鍵字提示“運行時錯誤457,提示該關鍵字已經與集合中的一個元素相關”
解決辦法:
1.從物件瀏覽器查看參考的Dictionary屬于哪個類別庫,Excel應該用Scripting類別庫的
2.查找有無同樣名稱的Dictionary物件
3.如果都找了確定沒問題,那么在程式開始加上APPLICATION.SCREENUPDATING=FALSE ON ERROR RESUME NEXT,程式結尾處重置螢屏更新就解決了。
親身經歷,血的教訓。希望能幫到大家。
uj5u.com熱心網友回復:
呵呵,你覺得你這個所謂“教訓”能對別人有幫助?拉倒吧…………

對于“第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”唯一的方法,而是有“更好”的方法!
uj5u.com熱心網友回復:
字典的key本來就是唯一的,有什么奇怪的。uj5u.com熱心網友回復:
應該這樣改:dim dict as new dictionary
' ...
if dict.exists(key) then
msgbox key & "已經存在!"
dict.item(key) = value ' 可選
else
dict.add(key,value)
end if
' ...
uj5u.com熱心網友回復:
錯了,應該這樣改: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
' ...
uj5u.com熱心網友回復:
VBA不需要打call!轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/40391.html
標籤:VBA
