VBSでAccess2000のバージョン確認

このQ&Aのポイント
  • VBSでAccess2000のバージョン確認を行う方法について説明します。
  • 実行環境としてはWinXPで、ACCESS2000およびACCESS2010Runtimeがインストールされている状態です。
  • 作成したコードでは、CreateObject関数を使用してAccess.Applicationオブジェクトを作成し、バージョンを取得します。結果によって、Access2000かAccess2010がインストールされているかを判断します。
回答を見る
  • ベストアンサー

VBSでAccess2000のバージョン確認

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のインストール有無です。 上記の現象について情報をお持ちの方、または他に良い方法をご存知の方がおりましたら ご連絡を頂ければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

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

yoakezeyo
質問者

お礼

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

その他の回答 (1)

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

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()

参考URL:
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200604/06040050.txt
yoakezeyo
質問者

お礼

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

関連するQ&A

  • Accessファイルバージョンの取得

    教えてください とあるサイトで、以下のAccessファイルのバージョンを所得するVBAを発見し、実行しましたが、 CurrentProject.FileFormat のステートメントで、「オブジェクトが必要です」エラーが発生します。 何か解決方法はありますでしょうか? 環境はwinXP+Access97です。 どうかご教授お願いいたします。 'File形式を判別します。 Select Case CurrentProject.FileFormat Case acFileFormatAccess97 strFormat = "Access 97" Case acFileFormatAccess2000 strFormat = "Access 2000" Case acFileFormatAccess2002 strFormat = "Access 2002-2003" End Select 参照設定は次の通り設定しあります。 Visual Basic For Application Microfoft Access 8.0 Object Library OLE Automation Microsoft ActiveX Data Objects 2.1 Library よろしくお願いいたします

  •  VBSの作り方がわかりません

    下記のようなVBSを使いたいのですが   テキストでなくエクセルをアクティブにしたいのですがうまくいきません   どのように直せばよいのかお教えください。  お願いいたします。 Dim excel With CreateObject("Wscript.Shell") .Run "D:\DATA\T.txt" End With On Error Resume Next Set excel = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set excel = CreateObject("Excel.Application") End If excel.Visible = True excel.Workbooks.Open "D:\DATA\Sin1.xls"

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • VBSでデータベースへの接続

    dbon.cfgファイルにSQL Serverへ接続のためのパラメータを設定しておき、それを読み込んでデータベースに接続しようとしていますが接続できません。 dbcon.cfgの中身は下記になっており、]以降のサーバー名、データーベース名を切り出すため、splitを指定しています。 値がわたっていないと思って、ループに"WScript.Echo strDBParm(intCnt)"を指定して中身を確認しようとしましたが、何も表示されません。 お手数をおかけしますがご教示いただけますようお願いいたします。 ----------------------------------------------- [server] サーバー名を指定 [database] データベース名を指定 [uid] [database]で指定したデーターベースに接続できるユーザ名を指定 [pwd] [uid]で指定したユーザーのパスワードを指定 ----------------------------------------------- -------------------------- [VBSスクリプト] Option Explicit Dim objFS Dim objFile Dim objADO Dim strDBParm(3) Dim intCnt Const strDBConCfg="C:\test\dbcon.cfg" Const ForReading = 1 Const TextCompare = 1 intCnt = 0 On Error Resume Next Set objFS = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number <> 0 Then WScript.Echo "FSオブジェクトが作成できませんでした" WScript.Quit(1) End If Set objFile = objFS.OpenTextFile(strDBConCfg,ForReading) If Err.Number <> 0 Then WScript.Echo strDBConCfg & "を開く事ができませんでした" WScript.Quit(1) End If Do Until objFile.AtEndOfLine = True strDBParm(intCnt) = Split(objFile.ReadLine, "]", TextCompare) WScript.Echo strDBParm(intCnt) intCnt = intCnt + 1 Loop Set objADO = CreateObject("ADODB.Connection") If Err.Number <> 0 Then WScript.Echo "ADOオブジェクトが作成できませんでした" WScript.Quit(1) End If objADO.Open "Driver={SQL Server};" & _ "server=strDBParm(0); database=strDBParm(1); uid=strDBParm(2); pwd=strDBParm(3);" If Err.Number <> 0 Then WScript.Echo "サーバーに接続できませんでした" WScript.Quit(1) End If objADO.Close Set objFS = Nothing Set objADO = Nothing

  • VBSバックアップ

    バックアップスクリプト(VBS)について教えて下さい。 単純にディレクトリをバックアップするスクリプトは、出来たのですが これに付加機能を与えたいです。 ◆世代管理をしたい。 ◆iniファイルから、バックアップ元と先、管理する世代等の情報を読み込みたい。 <bkup.vbs> Option Explicit Const ForReading = 1 '読み込み Const ForWriting = 2 '書きこみ(上書きモード) Const ForAppending = 8 '書きこみ(追記モード) Dim objFileSys Dim objShell Dim strCopyFrom Dim strCopyTo Dim strToDir Dim strNewDate WScript.echo "バックアップを開始します" Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") strNewDate = Year(Now) & _ Right(("0" & CStr(Month(Now)+0)),2) & _ Right(("0" & CStr(Day(Now)+0)),2) strCopyFrom = "C:\vbs" strToDir = "C:\backup" strCopyTo = objFileSys.BuildPath(strToDir,strNewDate) If objFileSys.FolderExists(strCopyTo) = True then WScript.echo "指定のパスには既にディレクトリが存在する為、" & _"バックアップ処理を中断します。" WScript.Quit Else objFileSys.CopyFolder strCopyFrom,strCopyTo WScript.echo "バックアップ処理は正常に完了しました。" End If Set objFileSys = Nothing Set objShell = Nothing 宜しくお願い致します。

  • VBSを使用したSQLCMDからのQuit

    VBSを使用してSQLCMDを実行してデータベースに接続できることを確認しましたが、 データベースの切断ができません。 SQLCMDユーティリティに制御が移ってしまっているため、VBSのシェルオブジェクトを使用して切断できないのではと考えております。 ADOを使用すれば、いいのは分かっているのですが、実際の環境ではADOを使用したデータベースへの接続が安定しないため、SQLCMDで接続する方法でスクリプトを作成しました。 何かいい方法がありましたら、ご教示頂けますでしょうか。 Option Explicit '■ オブジェクトの宣言 Dim objFSO Dim objFile Dim objWShell '■ 変数の宣言 Dim strBuf Dim strSearch Dim IngPos Dim IngCnt Dim idx Dim Param(3) Dim Hit Dim HitCnt Dim DBConCmd Dim DisConCmd '■ 定数の宣言 '// データベースコンフィグファイル格納フォルダ Const strDBConfigFolder = "c:\DBConfig" '// データベースコンフィグファイル Const strDBConfigFile = "c:\DBConfig\SQLCMDDBCon.cfg" '// 検索開始位置(1文字目) Const IngStart = 1 '// テキストモードで比較 Const IngTextCmp = 1 On Error Resume Next '□ FSOオブジェクトの作成 Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then '□ データベースコンフィグファイル格納フォルダの存在チェック If objFSO.FolderExists(strDBConfigFolder) Then WScript.Echo "データベースコンフィグファイルを格納フォルダが存在します" '□ データベースコンフィグファイルの存在チェック If objFSO.FileExists(strDBConfigFile) Then WScript.Echo "データベースコンフィグファイルが存在します" '□ データベースコンフィグファイルの読み込み Set objFile = objFSO.OpenTextFile(strDBConfigFile, 1) '□ データベースコンフィグファイル読み取りチェック If Err.Number = 0 Then WScript.Echo "データベースコンフィグファイルが読み取りできます" '□ ディレクティブをセット strSearch = Array("<server_name>", "<login_id>", "<password>") '□ ヒットカウントの初期化 HitCnt = 0 Do Until objFile.AtEndOfLine = True '□ 1行読み込み、バッファに格納 strBuf = objFile.ReadLine '□ インデックスの初期化 idx = 0 '□ ヒットフラグの初期化 Hit = 0 '□ ディレクティブヒット判定用の初期化 IngPos = 0 Do Until idx > 2 or Hit = 1 IngPos = Instr(IngStart, strBuf, strSearch(idx), IngTextCmp) If IngPos = 0 Then WScript.Echo strSearch(idx) & "が見つかりません" idx = idx + 1 Else WScript.Echo strSearch(idx) & "が見つかりました" IngCnt = Len(strSearch(idx)) Param(idx) = Mid (strBuf, IngCnt + 1) Hit = 1 HitCnt = HitCnt + 1 End If Loop Loop Else WScript.Echo "データベースコンフィグファイルが読み取りできまないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "データベースコンフィグファイルが存在しないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "データベースコンフィグファイルを格納フォルダが存在しないため、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "FSOオブジェクトが作成できないため、処理を終了します" WScript.Quit(1) End If '□ Shellオブジェクトの作成 Set objWShell = WScript.CreateObject("WScript.Shell") If Err.Number = 0 Then DBConCmd = "sqlcmd -S " & Param(0) & " -U " & Param(1) & " -P " & Param(2) objWShell.run DBConCmd If Err.Number = 0 Then WScript.Echo "データベースサーバーに接続しました" Else WScript.Echo "データベースサーバーに接続できませんでしたので、処理を終了します" WScript.Quit(1) End If Else WScript.Echo "Shellオブジェクトが作成できないため、処理を終了します" WScript.Quit(1) End If DBDisConCmd = "exit" objWShell.run DBDisConCmd '□ オブジェクトのクローズ objFile.Close '□ オブジェクトの開放 Set objShell = Nothing Set objFSO = Nothing

  • vbsでテキストファイル内の文字列検索

    初心者です。 テキストファイルを指定し、含まれる文字列を検索し、 結果表示したいと考えております。 色々探して、以下で作成したのですが、 うまく動いてくれません。 出来ましたら、テキストファイルの中の文字列の 一部分を指定して動作させたいと思っております。 どなたかご教示のほど宜しくお願い致します。 ---------------------------------------------------- Set WSHFso = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") Dim strSearchWord Set tmpFile = WSHFso.OpenTextFile("C:\AAA.txt") Do Until tmpFile.AtEndOfStream tmpLine = tmpFile.ReadLine strSearchWord = strSearchWord & tmpLine & vbcrlf Loop Dim SearchWord SearchWord = split(strSearchWord," ") if InStr(SearchWord(ix), "test")<>0 then WScript.Echo " testを含みます。" else WScript.Echo " testを含みません。" end if ----------------------------------------------------

  • vbsでexcelのクリアとフォームの表示をしたい

    お世話になっております。 vbsの以下の記述でexcelを開いています。 開くところまでは行くのですが、その後のsheet1のデータのクリアとUserForm1の表示がどうしてもできません。 申し訳ありませんが、どなたかおわかりの方、教えていただけないでしょうか。 宜しくお願いいたします。 Dim oApp Dim objWshShell Dim scriptPath 'Excelオブジェト作成 Set oApp = CreateObject("Excel.Application") 'WScript.Shellオブジェクト作成 Set objWshShell = CreateObject("WScript.Shell") oApp.Visible = True '不可視にする oApp.UserControl = True 'Excelファイルを開く scriptPath = WScript.ScriptFullName scriptPath = left(scriptPath,len(scriptPath)-len(WScript.ScriptName)) oApp.Workbooks.Open scriptPath & "共同資料.xlsm"

  • VBS 既に開いているIEを操作

    以下のコードで既に開いているIEをアクティブ化しています。 Dim objIE set Shell=Wscript.CreateObject("Shell.Application") for each tmp in Shell.Windows if TypeName(tmp.document)="HTMLDocument" then if tmp.LocationURL="指定URL" then set objIE=tmp end if end if Next 指定URLの部分を完全に一致していた場合ではなく、一部が一致していたら、そのIEをアクティブ化するようにしたいです。可能ならば方法を教えて欲しいです。

  • アクセスからアクセスファイルを開くには?

    アクセスからアクセスファイルを開きたいのですがうまく出来ないので教えてください。 Option Compare Database Option Explicit Sub test() Dim App As Access.Application Dim MyFileName As String Set App = CreateObject("Access.Application") MyFileName = CurrentProject.Path & "\アクセスファイル名.mdb" With App .Visible = True End With Set App = Nothing End Sub で、 .Visible = True でアプリケーションは開きますが Set App = Nothing を通過すると開いたアプリケーションが閉じてしまいます。 それにアプリケーションが開くだけで肝心のファイルが開かれません。 なので「.ファイルを開くVBAコード」が必要だと思うのですがそのコードがわかりません。