- ベストアンサー
VBSでAccess2000のバージョン確認
- VBSでAccess2000のバージョン確認を行う方法について説明します。
- 実行環境としてはWinXPで、ACCESS2000およびACCESS2010Runtimeがインストールされている状態です。
- 作成したコードでは、CreateObject関数を使用してAccess.Applicationオブジェクトを作成し、バージョンを取得します。結果によって、Access2000かAccess2010がインストールされているかを判断します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
RunTime 関連は?ですけどCドライブ中のMSACCESS.EXEのバージョンなら Dim oSH Dim oFS Dim oFLD Dim oF Dim j Dim sMsg Dim infoIndex 'XP の場合は39? Dim strComputer Dim objWMIService Dim colFiles Dim FCol Dim sSql sSql = "SELECT * FROM CIM_DataFile " _ & " WHERE Drive = 'C:'" _ & " AND FileName = 'MSACCESS'" _ & " AND Extension = 'EXE'" strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colFiles = objWMIService.ExecQuery(sSql) Set oSH = CreateObject("Shell.Application") Set oFS = CreateObject("Scripting.FileSystemObject") infoIndex = 39 For Each FCol In colFiles Set oF = oFS.GetFile(FCol.Name) Set oFLD = oSH.Namespace(oF.ParentFolder.Path) j = j + 1 sMsg = sMsg & j & "," & FCol.Filename _ & "," & FCol.Name _ & "," & oFLD.GetDetailsOf(oFLD.Items, infoIndex) _ & "," & oFLD.GetDetailsOf(oFLD.ParseName(oF.Name), infoIndex) _ & Chr(13) & Chr(10) Set oF = Nothing Set oFLD = Nothing Next MsgBox sMsg のVBSで出来るかと思います。Cドライブのファイルを総なめしてるので遅いです。 製品バージョン番号の辺りはそちらの状況に合わせて加工してください。 ここの掲示板はTabインデントが利かないので見辛いでしょうが勘弁。 なお、ExcelかAccessのVBEにて Sub TEST() ここに上記コードを張り付けて色々やって見てください。 End Sub
その他の回答 (1)
- queuerev2
- ベストアンサー率78% (96/122)
Web検索を行ったところ、Access RuntimeでCreateObjectできないという例が少数ですが見つかりました。 おそらく質問者様のケースにも当てはまるのではないでしょうか。 解決できた例としては、「始めにShellからMSACCESS.EXEとmdbを起動してから、CreateObjectではなくGetObjectを使用」というのがありました。 http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200604/06040050.txt しかしそれ以上の詳しい説明がありませんでした。 そこでGetObjectの実験をしてみました。 ただし、当方のPCにはOffice2000PremiumのAccessのみがインストールされおりRuntimeはなく、加えてOffice2003Standardがインストールされているという状況ですのでそこのところはご承知置きください。 その結果、次のようなコードでGetObjectと終了についてはうまく動作しました Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("C:\Program Files\Microsoft Office\Office\MSACCESS.EXE /nostartup") on error resume next counter=0 do Err.Clear wscript.sleep 500 set oOfficeApp=getobject(, "Access.Application") counter=counter+1 loop until (err.number = 0) or (counter > 20) en = Err.Number on error goto 0 'OfficeVer = oOfficeApp.Version 'エラーが出るのでコメントアウトした 'wscript.echo Officever oofficeapp.quit() wscript.echo en & " " & counter しかし、上記コートのコメントにも書いたとおりなぜかVersionプロパティを得ようとするとエラーが出ます。 下記のようにCreateObjectでもだめで、一方Excel2003ではOKなので もしかしたら当方のAccess2000に異常があるのかもしれません。 set oOfficeApp=createobject("Access.Application") oOfficeApp.visible=true 'エラーによる停止でも手動で終了できるように OfficeVer = oOfficeApp.Version wscript.echo Officever oofficeapp.quit()
お礼
おおっ!動作確認までしていただいたのですね。 ありがとうございます。 結局、対応したのはNo1ご回答頂いた方のコードから oFLD.GetDetailsOf(oFLD.ParseName(oF.Name), infoIndex) バージョン情報を引っ張って、先頭文字が”9.”をもっていたら2000と判定させる動きにしました。
お礼
ありがとうございます。動作確認できました。 これを加工すればいろいろできそうです!