|    | 
     ▼KANA さん: 
こんにちは。 
 
>>      MyDic.Add "1", rs(0) 
>>      MyDic.Add "2", rs(0).Value 
> 
> 上記の部分で rs(0)とrs(0).value の意味が 
> いまいちわかりませんので教えていただけないでしょうか? 
 
ごめんなさい。 
KANAさんの記述を使うと 
 
Midic.Add "1", rs![F1] 
Midic.Add "2", rs![F1].Value 
 
の方が解りやすかったですね。 
 
rs(0) は rs の一番初めのフィールドを表しています。 
 
 
>rs(0)のほうはFieldとでてきてて 
 
rs![F1] をDictionary オブジェクトの Item 値に代入すると 
rs![F1] の値ではなく、ADODB.Recordset で定義されている 
フィールドオブジェクトへの参照を代入してしまっている事を意味します。 
 
初めに投稿されたコードですと、 
 
>>> rs.Close 
>>> Set rs = Nothing 
 
の箇所で rs への参照が切れてしまっている為、 
フィールドも参照できなくなりエラーが発生しております。 
 
値だけをDictionaryオブジェクトに入力するのであれば 
rs![F1].Value と明示的に指定しなければいけないという事です。 
 
 
KANAさんのコードをそのまま生かすとなると、 
 
>  MyVal = Array(rs![F1], rs![F2], rs![F3], rs![F4], rs![F5], rs![F6], rs![F7], _ 
>        rs![F8], rs![F10], rs![F11], rs![F12], rs![F13], rs![F14], rs![F17]) 
 
  MyVal = Array(rs![F1].Value, rs![F2].Value, rs![F3].Value, rs![F4].Value, rs![F5].Value, rs![F6].Value, rs![F7].Value, _ 
        rs![F8].Value, rs![F10].Value, rs![F11].Value, rs![F12].Value, rs![F13].Value, rs![F14].Value, rs![F17].Value) 
 
となりますね。 
 
 
> Accessで、こういうことをやる場合は、 
> Dictionaryはあまり使わないほうがいいのでしょうか? 
 
当方でしたら、SQLで片づけてしまうかと思われます。 
提示されたコードのうち、左3つを比較するSQLでしたら 
 
SELECT  
  旧TBL.key 
 , IIf([旧TBL]![F1]=[新TBL]![F2],"",[新TBL]![F2]) AS 比較1 
 , IIf([旧TBL]![F2]=[新TBL]![F3],"",[新TBL]![F3]) AS 比較2 
 , IIf([旧TBL]![F3]=[新TBL]![F4],"",[新TBL]![F4]) AS 比較3  
FROM  
  旧TBL  
INNER JOIN  
  新TBL  
ON 旧TBL.key = 新TBL.key 
WHERE NOT( 
     ([旧TBL]![F1]=[新TBL]![F2]) 
   AND ([旧TBL]![F2]=[新TBL]![F3])  
   AND ([旧TBL]![F3]=[新TBL]![F4]) 
         ) 
 
 
上記のSQLをクエリのSQLビューに張り付け実行すると 
結果が出るかと思われます。 
(コピーペーストする際は 
 全角スペースは半角スペースに変換して下さい) 
 
ただ、自分に慣れている方法で結果を出すことは 
決して悪い事だと思いませんので 
まずはコードの問題を解決した後 
ご興味があればSQLにも挑戦されてみてはいかがでしょうか。 
 
 | 
     
    
   |