vnaoivoibonaeaの日記: 【メモ】【VBA】Collectionをマップとして使用してはいけない
日記 by
vnaoivoibonaea
1.登録済みのキーか判断する手段がない。【回避可能】
Collection自体には、保存済みか否か判断するためのメソッドはありません。
そのため、取得処理を呼び出し、エラーが発生するか否かで判断するしか手段がありません。
【回避方法】エラーを検出して未登録だと判断する
例えば、こんな感じ(動作未確認)
Function ContainsKeyForVBColl(list As Collection, key As String) As Boolean
On Error Goto KeyIsNotRegistered
Call list.Item(key)
ContainsKeyForVBColl = True
Exit Function
KeyIsNotRegistered:
ContainsKeyForVBColl = False
Exit Function
End Function
2.全角、半角、大文字、小文字を区別しない
MSDNでは明言されていませんが、CollectionのKey値は全角、半角、大文字、小文字を区別しません。
#一意な文字列表現とあるけど、=演算子で比較すると同一でないといわれる。。。
Dim col As Collection
Set col = New Collection
col.Add Item:= "hoge", Key:="fuga"
col.Add Item:= "hoge", Key:="FUga" '登録済みと怒られる
【メモ】【VBA】Collectionをマップとして使用してはいけない More ログイン