VBAでXML(JSON)読込の際、参照設定を変更しない方法

タグの編集
投稿者 とろろ  (社会人) 投稿日時 2014/7/1 08:51:30
おはようございます。

以前、こちらでXMLの読込についてご相談させていただいた、とろろといいます。

その節は大変お世話になりました。無事開発は終わった・・・はずだったのですが、
なんとPCのスペックが社員全員バラバラで、参照設定を変更するとエラーが出てしまい
フォールバックとなってしまいました。

追加した参照設定は以下の3つで、どれもNGでした。。

・MicrosoftXml6.0(3.0もNG)
・JET Expression Service type Libruary
・MicrosoftScriptingRuntime

これらを使用せず、XMLやJsonを読み込み、解析することはできるのでしょうか。

今の案では、

1:本機能を使用できるPCを制限する

2:上記参照設定を必要としない方法があれば、その改修を行う

使用しているのは
ACCESS2000、OSはXP,Vista,Windows7など様々です。
Officeも2000と2008が混在しております。

恐れ入りますが、よろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2014/7/1 17:33:23
> 以前、こちらでXMLの読込についてご相談させていただいた、とろろといいます。
参考情報として、当時の URL を示してもらえると助かります。


> 参照設定を変更するとエラーが出てしまい
一応、References コレクションを使うことで、参照設定が破損しているかどうかを調べたり
参照設定を動的に行うといったことも可能ですが、そもそも Access を使うのであれば、
バージョン違いで運用するのではなく、本来はバージョンごとに異なる
mdbファイル(あるいはaccdbファイル)を用意するべきだと思いますよ。


とりあえず、参照設定を外して、レイトバインドで実装してみては如何でしょうか。

Dim req As Object
Set req = CreateObject("MSXML2.XMLHTTP")

Dim parser As Object
Set parser = CreateObject("MSXML2.DomDocument")



> ・MicrosoftXml6.0(3.0もNG)
いわゆる MSXML6 ですね。Microsoft Download Center からダウンロード入手可能です。
XML の解析が必要であればインストールしておきましょう。(Win9x は非対応)
http://support.microsoft.com/kb/269238/ja
http://0xc000013a.blog96.fc2.com/blog-entry-194.html

(3.0 については、インストールされていない環境のほうが珍しいのですけれどね…)


もしも MSXML2.XMLHTTP を使うことが目的であれば、
WinHttp.WinHttpRequest で代用するという手もあります。
http://d.hatena.ne.jp/ardarim/20070114/1168771797


> ・JET Expression Service type Libruary
使っている様子が無く、外しても動作に影響が無いようであれば、
参照設定から外してしまっても良いかも?


> ・MicrosoftScriptingRuntime
本体は SCRRUN.DLL ですね。

最近の OS では、システムコンポーネントの一部となっていますが、
Win9x や NT4 では初期インストールされていないため、別途、
Windows Scripting Library をインストールする必要があったかと思います。

使いたいオブジェクトが、Dictionary なのか FileSystemObject なのか分かりませんが、
こちらもレイトバインドで呼び出してみて、呼び出せないようであれば、インストールを
行うように指示するメッセージを組み込んでみては如何でしょう。


> 1:本機能を使用できるPCを制限する
それらの機能を利用できるかどうかをテストするための、
チェックスクリプトを用意しておくと良いかもしれませんね。


> 2:上記参照設定を必要としない方法があれば、その改修を行う
「車輪の再発明」や「追加調査」をするのが良いのか、環境を整備するほうが良いか、
作業コストと相談になりそうですね。
投稿者 とろろ  (社会人) 投稿日時 2014/7/3 12:51:17
魔界の仮面弁士様

お世話になっております。
URLの件、失礼いたしました。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=18602

で質問させていただいておりました。

参照設定ですが、

> ・MicrosoftXml6.0(3.0もNG)
もしも MSXML2.XMLHTTP を使うことが目的であれば、
WinHttp.WinHttpRequest で代用するという手もあります。

→こちら、このやり方で参照設定不要とできました。
ありがとうございました。

> ・JET Expression Service type Libruary
→こちら、消しても問題なく動くことを確認いたしました。
なぜ追加したのか・・・失礼いたしました。

> ・MicrosoftScriptingRuntime
こちらなのですが、エラーが出てしまう方のPCを確認したところ
SCRRUN.DLLが既にインストールされておりまして、私のPCと
バージョンも全く同じものでした。
しかし、こちらのみ参照設定を追加したバージョンのACCESSでも
エラーが起きてしまいます。

他にはどのような原因が考えられますでしょうか。
なにか元々の参照設定とケンカでもしているのか・・・
なお使いたいオブジェクトはDictionaryです。


また、案についてのご意見もありがとうございます。
急遽PHPで作り直す?とも言われてしまい戸惑っておりますが、
頂いたご意見を参考に上長と相談したいと思います。

どうぞよろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2014/7/3 14:17:35
> なお使いたいオブジェクトはDictionaryです。

参照設定をはずした上で、

Dim dic As Scripting.Dictionary
Set dic = New Scripting.Dictionary


から、

Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")


に変更してみてください。


そもそも後者ですらエラーになってしまうようであれば、実行環境そのものに
問題がある可能性が高いので、ライブラリ( WSH )の更新や Windows Update の
適用を検討した方が良いかもしれません。