Microsoft Accessのコードの質問です


Access2000、2003、2007、2010全てのバージョンに対応した、ボタンクリック時にEXCEL.exeを探し、存在するパスを出力するを出力するコードを考えています。

今までFileSearchオブジェクトを使用していたのですが、2007以降は対応していない
と聞き困っているところです。PCによってProgram Filesフォルダに入っているとは
限らない為、Cドライブの中を全て調査したいのですが…

何か良いサンプルのあるサイト or 実際のコードはありませんか?

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2011/07/07 20:18:24
  • 終了:2011/07/08 21:17:40

ベストアンサー

id:SweetSmile1978 No.2

SweetSmile1978回答回数189ベストアンサー獲得回数292011/07/08 08:29:44

ポイント180pt

レジストリからパスを取得するのが早いですし、確実かと思います。

excel がインストールされていると、

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe

に情報が作成されます。

レジストリへのアクセス方法は以下が参考になるかと思います。

http://officetanaka.net/excel/vba/tips/tips43.htm

id:darkhair_tachikawa

ありがとうございます。

この処理をメインにして(あまりないと思いますが)レジストリが見つからない場合はkm1981さんの全探索を行うことで、いままでと同等の処理で高速化することができました。

2011/07/08 21:16:46

その他の回答(1件)

id:km1981 No.1

km1981回答回数429ベストアンサー獲得回数492011/07/07 21:32:37

ポイント120pt

FileSystemObjectを使えばできます

これはAccess2007以前でも利用できます


次はExcelVBAのサンプルコードですが、Accessでも同じコードが使えるともいます

http://officetanaka.net/excel/vba/tips/tips36.htm

id:darkhair_tachikawa

ありがとうございます。後半のソースを参考にさせて頂きました。

アクセス制限のあるファイルもありましたが、読み飛ばしのエラー処理を行いました。

2011/07/08 20:49:32
id:SweetSmile1978 No.2

SweetSmile1978回答回数189ベストアンサー獲得回数292011/07/08 08:29:44ここでベストアンサー

ポイント180pt

レジストリからパスを取得するのが早いですし、確実かと思います。

excel がインストールされていると、

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe

に情報が作成されます。

レジストリへのアクセス方法は以下が参考になるかと思います。

http://officetanaka.net/excel/vba/tips/tips43.htm

id:darkhair_tachikawa

ありがとうございます。

この処理をメインにして(あまりないと思いますが)レジストリが見つからない場合はkm1981さんの全探索を行うことで、いままでと同等の処理で高速化することができました。

2011/07/08 21:16:46
  • id:cx20
    Excel.exe に限定した話であれば、レジストリからパスを取得することが可能です。

    方法1:App Paths キーを参照する方法

    「HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\excel.exe」キーの既定の値

    方法2:ProgID からアプリケーションのパスを取得する方法

    「HKEY_LOCAL_MACHINE\Software\Classes\Excel.Application\CLSID」キーの既定の値
                ↓
    「HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}」キーの「LocalServer32」の値

    <参考情報>
    ■ Office アプリケーションのパスを調べる方法
    http://support.microsoft.com/kb/240794/ja
    ■ PowerShell: Excelの実行パスを取得する(Get-ItemProperty)
    http://mtgpowershell.blogspot.com/2011/04/excelget-itemproperty.html
    ■ Application Registration (Windows)
    http://msdn.microsoft.com/en-us/library/ee872121.aspx
  • id:windofjuly
    うぃんど 2011/07/08 06:48:44
    Excel.exeが1つではない可能性なども考慮すると、コメント欄で id:cx20 さんが示しておられるようにレジストリを見るのが確実だとは思いますよ
     
    その他にもCreateObjectでExcelのインスタンスを生成して Application.Path を得るという手も考えられますが、これはメモリを食うので環境次第と言ったところです
  • id:windofjuly
    うぃんど 2011/07/08 06:59:40
    質問>>FileSearchオブジェクトが使えない
    km1981>FileSystemObjectを使えばできます
     
    自分が回答に書いたURLに書かれているコードすら見ていないとは、ほんとにいいかげんな回答者ですね(時間が無いので他の回答には突っ込みいれてませんけど、いいかげんな回答が多くてあまりにも目に付くのであえて苦言呈します)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません