Dictionaryの挙動が不可解で、原因を知りたいです。
Dim dicBasic as object Dim key Set dicBasic = CreateObject("Scripting.Dictionary") strQ = "SELECT * FROM tblBasic" rs.Open strQ, gCON, adOpenKeyset, adLockReadOnly rs.movefirst Do dicBasic(rs.fields("ID")) = rs.fields("氏名") rs.MoveNext If rs.EOF Then Exit Do Loop Set rs = Nothing For Each key In dicBasic MsgBox key MsgBox dicBasic(key) Next key
このコードの、MsgBox(key)でエラーが出ます。 エラーメッセージは、タイトルが「Microsoft Excel」で本文はまったくの空白というものです。
dicBasicには100近くのレコードが入っているのは確実です。(dicBasic.Countで確認)
dicBasicにレコードを追加する部分を、
dicBasic.ADD(rs.fields("ID")), rs.fields("氏名")
とすると、今度はMsgBox dicBasic(key)で同じエラーが出ます。
同ブックの他のモジュールでは、Dictionaryを用いた集計が問題なくできているので、ブックの参照設定のあたりに問題があるとは思えないです。
また、for eachの部分を、
For Each key in dicBasic.keys
としても変わりません。
これ以上、何に手をつけていいのかわからず困っています。
何が原因と考えられますでしょうか?
試してみることがあればご指摘ください。
なお、
Dim key
の部分は、これがないと「変数が定義されていません」とエラーが出るので、追記したものです。
型はどうしていいのかわからないのでそのまま(variant扱い?)にしてあります。
調査したこと、試したことですが、本文の中に書いてしまいました。
For Each key in dicBasic → For Each key in dicBasic.keys としたこと、
dicBasic(rs.fields("ID")) = rs.fields("氏名") → dicBasic.Add(rs.fields("ID")), rs.fields("氏名") としたことです。
いずれの変更によっても、挙動が思い通りになることはありませんでした。
質問は編集できますので、質問を正しいものに修正してください。
エラーメッセージとエラー番号も質問に追記してください。
エラーが出たなら、エラーメッセージを提示しましょう
エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
動作以前に、下記の部分でコンパイルエラーになり実行できませんが、実際のコードをコピペしてください。
Dim dicBasic as object,Dim key

回答1件
あなたの回答
tips
プレビュー