none
Excel2016 で Path環境変数の参照がされない RRS feed

  • 質問

  • Excel2016(32bit)にて、

    <実行1>
    システムのPath環境変数で、ABC.dllの存在するフォルダを指定した後、以下を実行すると
    Declare PtrSafe Function Calc Lib "ABC.dll" (ByVal a As Long) As Long
    n = Calc(3)
    「エラー53 ABC.dllが見つかりません」となる。

    <実行2>
    次に、以下のように dllのパスも指定すると
    Declare PtrSafe Function Calc Lib "D:\Test\ABC.dll" (ByVal a As Long) As Long
    n = Calc(3) は正常に動作する。

    ちなみに、Excel2013以前では、<実行1>のやり方で問題なかった。

    2018年10月24日 14:21

すべての返信

  • 私の環境(Windows10 64bit、Excel 2016 32bit)でシステムの環境変数 PATH に追加したフォルダーに DLL を配置し、ご質問のような方法で、Excel VBA から DLL をロードでき、関数も実行できました。フルパスで指定すると正常に動作するということから、システムの環境変数の PATH に何か問題があるかもしれません。(スペルミス?)

    コマンドプロンプトを開いて、start ABC.dll と打って「ABC.dll が見つかりません」と出たら正しくパスが通ってないと思われます。

    2018年10月24日 16:23
  • 失礼な質問かと思いますが、環境変数のPathを設定したあと、Windowsは再起動しましたか?
    2018年10月24日 17:02
  • すでに指摘がありますが、環境変数はシステムのプロパティで設定した時点で即座に反映されるわけではなく、プロセス起動時に反映されます。
    少なくとも、プロセスの再起動、場合によっては サインアウト&サインイン、Windows の再起動といった形で、環境変数が適用されるように手順を踏む必要があります。
    2018年10月24日 21:29
  • ご返答ありがとうございます。

    OpenOfficeというオフィスソフトでも同じように、Declare指定して実行していますが、

    こちらは、正常に動作します。ですので、Path環境変数の指定は問題ないようです。

    もちろんPCの再起動もしております。(Windows10)

    やはり、Excel2016になにか問題がありそうです。

    Office2016 の場合、Pathの属性が REG_EXPAND_SZ でないと認識できない?

    という記事があったので、変更してみましたが、だめでした。

    Officeの再セットアップが必要かもしれません。

    現在、やりようがないような状態で困っております。

    2018年10月25日 1:00
  • 設定した Path がプロセスに適用されているかは、そのプロセスの PEB (Process Environment Block) を調べればわかる。
    つまり、ターゲット プロセスの PEB にその Path 情報があれば Path 以外の別の要因だし、なければ Path 設定方法の問題。
    なので、とりあえず Excel プロセスの PEB を確認してみては?
    2018年10月25日 1:08
  • 見当違いかもしれませんが、Excel 2016 がストアアプリ版ということはないでしょうか。ストアアプリ版は環境変数 PATH を参照しませんので。次のブログ記事を参照してみてください。

    ■Microsoft ストア アプリ版 Office 2016 (Centennial) での開発 – その1 – (DLL の読み込み)

    https://blogs.msdn.microsoft.com/office_client_development_support_blog/2018/05/15/office-centennial-vol1/

    ※リンクになってなくてすみません。

    • 回答の候補に設定 kenjinoteMVP 2018年11月2日 12:47
    2018年10月29日 8:21
  • Office2016 はプレインストールで、Windows Storeからセットアップするようになっています。

    m.yamanoi 様 の ご指摘が正しいようです。

    Excel、OpenOffice ともに、ブックを開いたときに、SetDllDirectoryA("kernel32.dll") でパスを設定するように変更しました。

    今後、環境を前提としたつくりは、なるべくやらないようにします。

    どうもありがとうございました。

    2018年11月2日 4:09