none
半角スペースを含むパスの指定について RRS feed

  • 質問

  • こんにちは。

    私はマクロでshell関数を使ってオフィス製品上で他のソフトを時々起動させています。(具体的にはddwin.exeという辞書ソフトなどです。)

    最近、Windows8.1(32ビット版)とoffice2013の組み合わせで、shell関数がエラーメッセージを出すことに気が付きました。

    Windows7(32ビット版)+Office2010では動くのに、その同じマクロがOffice2013からでは

    「プロシージャ呼び出し、または引数が不正です。」というエラーメッセージが出ます。

    いろいろ調べて分かったことは、shell関数で起動しようとするそのソフトのパスが半角スペースを含んでいるのが原因だろうということでした。

    エラーを出すマクロは、以下のようなコマンドボタンでテキストボックスの中から単語を引数として渡すという単純なものです。

    半角スペースを含むパスは""で囲まなければならないということは知っていましたので、Office2010で動くマクロは””でパスをくくっています。

    (ddwin.exeの後の,2,,,部分は辞書ソフトの引数で、ここには問題ありません。)

    Private Sub CommandButton1_Click()
        Dim rc
        Dim searchword, pass
        searchword = TextBox1.Text
        searchword = Replace(searchword, " ", "")
        pass = """C:\Program Files\DDwin\ddwin.exe"",2,,, " & searchword
        rc = Shell(pass, vbMaximizedFocus)
        If rc = 0 Then MsgBox "起動に失敗しました    "
    End Sub

    ためしに、ddwin.exeの場所をCドライブ直下に移し、マクロの5行目を

    pass = """C:\DDwin\ddwin.exe"",2,,, " & searchword

    に変えるとOffice2013でも、エラーが出ません。

    もしかすると、Office2013には2010と違う、半角スペースを処理するパスの指定の仕方があるのかもしれないと思いました。

    ご存知の方がいらっしゃいましたら、教えていただけないでしょうか。


    2014年8月3日 2:52

すべての返信

  • pass = """C:\Program Files\DDwin\ddwin.exe"",2,,, " & searchword

    の",2はおかしいでしょう。

    " ,2

    でしょう。

    一方

    , "の空白は不要でしょう。

    つまり

    ,2,,,

    の挿入場所を間違えているのでしょう。

    コマンド(空白)引数

    なのに、引数側でなく、コマンド側に挿入した。

    コマンド(空白)引数 のイロハが分かってない。

    それから、passはおかしいのでpathに変えてください。

    2014年8月3日 12:32
  • 返信、ありがとうございます

    おっしゃることはわかります。

    起動するプログラムとコマンド引数の間に空白がないから、コマンドと引数が区別できないということだと思いますが、

    ここに、質問する前に何度もそのことは試していました。",2,,,"だとうと、" ,2,,,"とOffice2010+Windows7では起動しますが、

    Office2013+Windows8.1では起動しません。(書かれている通り、最後の空白はあってもなくてもOffice2010では起動しました。) shell関数で起動しようとしているプログラムの仕様かもしれません。

    OneDriveにOfficeファイルを置いていて、(具体的にはPowerPoint pptmファイル)二つのPCで同じマクロを使ったときにOffice2013の場合だけ、マクロにエラーが出ました。ですので、コマンド引数の問題ではありません。(二つのPCで同じフォルダーC:\Program Files\に起動するプログラムは置いています。)また、最初の投稿に書きました通り、起動するプログラムをC:\に移動させるとOffice2013でも起動できます。コマンド引数以外に原因は何か考えられますでしょうか。


    2014年8月3日 14:46
  • 一つのPCであるマクロが動くのに、別なPCでは動かないということをご相談しました。

    自分でどうして片方のPCだけエラーがでるのか違いをいろいろ調べてみましたところ、

    マクロが動かないPCのプログラムの実行ファイルに、プロパティの互換性のタブのところで「管理者としてこのプログラムを実行する」のところにチェックが入っていることに気が付きました。これを外すと、shell関数のエラーが出なくなりました。私が一度そのプログラムの設定を変更するために「管理者として実行する」にチェックを入れていたのをその後、元に戻していなかったのがshell関数でエラーが出る原因だとわかりました。

    ちなみにC:\のそのプログラムをコピーしたときは自動的に「管理者として実行する」からチェックが外れていました。shell関数でエラーが出るのは、パスに半角スペースがあるからだと思い込んでいましたが、違っていました。お騒がせしました。

    後学のために、shell関数で「管理者として実行する」にはどうのようにしたらいいか教えていただけないでしょうか。

    ご返信、ありがとうございました。


    2014年8月3日 15:43
  • ShellExecute()でrunas動詞を指定する。

    2014年8月3日 16:06
  • ありがとうございました。

    CreateObject("Shell.Application").ShellExecute  ...

    のようにするようですね。googleで検索してみましたが、VBAに関しては情報が少ないようでした。

    引数に関しては自分で調べてみたいと思います。

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


    2014年8月3日 16:31