パスワードを忘れた? アカウント作成

vnaoivoibonaeaさんのトモダチの日記みんなの日記も見てね。 スラドのRSSを取り込んでみよう。

13447705 journal
日記

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" '登録済みと怒られる

typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...