質問
2015年4月14日火曜日 8:46
お世話になります。
現在、ACCESS2003形式で作成したシステムをACCESS2010でも問題なく使用可能か検;作業を行っております。
その際、ACCESS側からEXCELファイルを展開し、内容を編集/保存する処理の検;を行った所、下記リンクと同様の事象が発生しております。
”https://social.msdn.microsoft.com/Forums/ja-JP/5f5744dc-7e3b-45a6-a89f-0441813ee169/access2010excel1004?forum=vbajp”
対象箇所が多くこれからも継続して運用してく上で上記リンクの対応方法(CSTR関数等で型変換をかける)では現実的ではないと考えております。
根本的な解決方法を教えて頂きたい。
すべての返信 (4)
2015年4月14日火曜日 9:49 ✅回答済み
エラーの発生箇所も、リンク先の内容と同じなのでしょうか?
WS.Cells(行番号,列番号).Value = RS!列名
WS.Cells(行番号,列番号).Value = RS("列名")
というのは、本来は
WS.Cells(行番号,列番号).Value = RS!列名.Value
もしくは
WS.Cells(行番号,列番号).Value = RS.Collect("列名") ’ADODBの場合
WS.Cells(行番号,列番号).Value = RS.Fields("列名").Value ’ADODB または DAO の場合
と記述されるべきです。Value が付いていない場合、値ではなく Field オブジェクトの参照となります。
代入が Set ではなく Let 動作のため、自動的にその Field オブジェクトの既定のメンバーが読み取られることになるとは思いますが、この自動判定の時に、何らかの問題が発生しているのかも知れないので、根本的対策のために、上記を確認してみては如何でしょう。
もし、Value がついているのにエラーが出るようであれば……非常に稀なケースですが、Value から得られるデータが VBA 非互換の値になってしまっている可能性があります(例:符号なし32bit整数型な VARIANT 値が返されるケースなど。どのような型が返されているかは、VarType 関数で調べられます)。このケースの場合、自分は ODBC ドライバーの更新で解決できました。ただし今回は 対Access の接続のようなので、この事象とは別だと思いますけれ。(型が異なっているのが原因なので、CStr や CLng などで明示的変換をかければ、VBA からも取り扱えるようになります。今回それは現実的な作業量では無いとのことですから、実施する余裕は無いかもしれませんけれども)
2015年4月14日火曜日 10:03
魔界の仮面弁士さんからの返信に追加して、リンク先の対応を試しに一か所やってみた場合に現象が改善するのかどうかも気になります。
2015年4月15日水曜日 8:18
魔界の仮面弁士様
回答有難うございます。
ご指摘の通り、Valueが欠落しておりました。Valueを付加したところ問題無く処理が完了致しました。
2015年4月15日水曜日 8:21
aviator___様
回答有難うございました。
魔界の仮面弁士様のご指摘内容の通り、Valueの欠落が原因でした。