アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBScriptsでAccess2000のインストール状態を調べようとしています。

実行した環境は、以下です。
 環境(1)
  WinXP
  ACCESS2000
  ACCESS2010Runtime

作成したコードは以下です。

------------------------
Dim objAcc
Dim AccVer

On Error Resume Next
Set objAcc = CreateObject("Access.Application")

If Err.Number = 0 Then
AccVer =objAcc.Version

Select Case AccVer

Case 9
WScript.Echo "ご利用のPCにはAccess2000がインストールされています。"

Case 14
WScript.Echo "ご利用のPCにはAccess2010がインストールされています。"

End Select

Else
WScript.Echo "Access はインストールされていません"
End If
-----------------------------

実行をすると、"Access はインストールされていません"とメッセージが出て、
ACCESS2000のインストールを認識していません。

CreateObject("Access.Application")をCreateObject("Access.Application.9")
に変更しても同じ結果でした。

他の環境でも確認しましたが、以下の結果でした。

 環境(2)
  WinXP
  ACCESS2010
   ⇒"ご利用のPCにはAccess2010がインストールされています。"

 環境(3)
  WinXP
  ACCESS2010Rintime
   ⇒"Access はインストールされていません。"

ただ、実際に確認が必要になるのは、環境(1)の状態でのAccess2000のインストール有無です。

上記の現象について情報をお持ちの方、または他に良い方法をご存知の方がおりましたら
ご連絡を頂ければと思います。

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございます。動作確認できました。
これを加工すればいろいろできそうです!

お礼日時:2012/09/24 11:52

Web検索を行ったところ、Access RuntimeでCreateObjectできないという例が少数ですが見つかりました。


おそらく質問者様のケースにも当てはまるのではないでしょうか。

解決できた例としては、「始めにShellからMSACCESS.EXEとmdbを起動してから、CreateObjectではなくGetObjectを使用」というのがありました。
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi? …
しかしそれ以上の詳しい説明がありませんでした。
そこで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()

参考URL:http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi? …
    • good
    • 0
この回答へのお礼

おおっ!動作確認までしていただいたのですね。
ありがとうございます。

結局、対応したのはNo1ご回答頂いた方のコードから
oFLD.GetDetailsOf(oFLD.ParseName(oF.Name), infoIndex)
バージョン情報を引っ張って、先頭文字が”9.”をもっていたら2000と判定させる動きにしました。

お礼日時:2012/09/25 09:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!