プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっています。ちょっと前に http://bit.ly/29gdmC4 にてA1セルにフルパスを入力して、PDFファイルを開く方法を教えて頂きました。
教えて下さった、maiko0333さん、ありがとうございます。

教えたもらったコードにファイルが存在しなかった時のエラーコードを貼り付けて使ってみました。
すると、自宅のパソコンではうまくいくのですが、職場のパソコンでは予期しないエラーでうまく動作しません。

理由は多分、職場のPC環境のせいだと思っています。

自宅でテストする時は自分のパソコンのCドライブにアクセスしています。
ですが、職場のPCはネットワーク内にありA1セルで検索にいくPDFファイルはNASの中にあります。
しかもWiFiを経由するので無線環境下にあります。

要するに、、、、素人の判断ですが、多分、最初に「If Dir(Range("A1").Value, vbNormal) 」
で検索した時はファイルが見つかるのですが、実際にPowerShellでファイルにアクセスしたときに、モタモタしてしまい「該当なし」ではない別のエラーになってしまうのではないかと考えています。

という状況ですので、私が作成したような先にファイルの有無を確認するタイプのエラー対策ではなく、PowerShellでファイルが開けないという結果が出てからのエラー対策というのは出来ないのでしょか?

もし出来るのでしたら教えて下さい。
※安定していれば他の方法でも構わないです。

詳しい方、説明の上手な方、直接、コードで説明できる方、すいませんがよろしくお願いします。

※今日、明日と仕事が休みのため今、職場PCのエラーを記載することが出来ません。
職場PCのエラーメッセージは月曜日にこちらに貼り付けようと思っています。
※一応、エクセルの画面も貼り付けておきます。
※コードは以下の通りです。
※NASはバッファローのLinkStationです。

-------------
Sub Macro1()

If Dir(Range("A1").Value, vbNormal) = "" Then
MsgBox ("該当なし")
Else

Dim ターゲットパス As String
ターゲットパス = Range("A1").Value
Dim WSH As Object
Set WSH = CreateObject("Wscript.Shell")
WSH.Run Chr(34) & ターゲットパス & Chr(34), 1 '第2引数 WshWindowStyle は1が通常サイズ、2が最小化、3が最大化。好みでどうぞ」
Set WSH = Nothing

End If
End Sub

「PowerShellを使って関連付けられ」の質問画像

質問者からの補足コメント

  • エラーメッセージの画像です

    「PowerShellを使って関連付けられ」の補足画像1
    No.2の回答に寄せられた補足コメントです。 補足日時:2016/07/11 16:23

A 回答 (3件)

最初に、PowerShell って、前の人が使っていた言葉ですね。


PowerShell は、.Net FrameWork 由来のプログラミング言語で、VBScript に取って代わるものではあるのですが、なかなか、環境的にも、多くの人にも広まっていないような気がします。

"Wscript.Shell" は、Windows のオートメーション・オブジェクトの一部で、おもに、VBScript に使われます。

今回のWscript.Shell のRun メソッドは、拡張子の定義づけられたアプリが呼び出されるという仕組みです。

どんなエラーが出たかにもよりますが、

例えば、こんな内容のもの。
--------------------
実行時エラー '-2147024894(80070002)':
'Run'メソッドは失敗しました。'IWshShell3' オブジェクト
--------------------

ここを読んでみてください。
失敗の原因と思われることが書かれています。

https://www.moug.net/tech/exvba/0060072.html

>実は、WSHのRunメソッドに指定するファイル名には「空白を含まない」というルールがあります。
>ファイル名に空白が含まれていると、Runメソッドは空白までがファイル名であると認識してしまうのです。

そのために、もう一度、クォーテーション・マーク("")で囲んであげる必要があるかもしれません。

例えば、こんなふうに書き換えてみました。

Sub FileExecute()
 Dim WSH As Object
 Dim FName As String
 Set WSH = CreateObject("Wscript.Shell")
 FName = Range("A1").Value
 If Dir(FName, vbNormal) = "" Then
    MsgBox "ファイルが見つかりません。", vbExclamation
 Else
   WSH.Run """" & FName & """", 3
 End If
 Set WSH = Nothing
End Sub
    • good
    • 1
この回答へのお礼

ご解答ありがとうございます。

リンク先の説明を読んでみました。
今のところどれもあてはまるようなものがないような気がします。
正直なところよくわかりませんが。

とにかく職場のNASとWifi環境下でないと試せないので、
すいませんが詳細の説明は月曜日以降ということにさせて頂きます。

もしご面倒でなければ月曜日以降に観て頂ければ補足のところで説明します。
※質問はしばらく閉じないとおきます。

いつもご解答ありがとうございます。

お礼日時:2016/07/09 22:34

>1回目のコードでバッチリです!


>どうしてこんなに安定しているのか不思議です。

思惑があたったというところですが、ファイルの種類がある程度決まっているなら大丈夫だと思います。

まあ、もしダメでも、解決方法はいくつか用意していますから、その時は、またお聞きになったらよいかと思いますが、分からなくなったら、コマンドプロンプト上で、試してみれば、だいたいのことはみえてくるはずです。
    • good
    • 1
この回答へのお礼

今回は本当にありがとうございます。
エラーメッセージの件ですが職場でお礼をアップした時には、
エラーメッセージがご指摘の症例だということに気が付きませんでした。

今落ち着いて読み返したところご指摘の通りで、確かにファイル名ではありませんが、
フォルダー名の一部に全角スペースがありました。

それとリンク先のページにあった「Chr(34)」と「""」が同じだということも今回初めて知りました。
前回教えて頂いた方のコードの中にも「Chr(34)」という文字があったのですが、
意味がわからないままスルーしていました。

今回は本当にありがとうございます。
VBAの本を2冊読み終え、そろそろ3冊目も読み終えます。
もうちょっと実力がついたら今まで頂いたアドバイスを読み返してみようと思っています。

今後ともよろしくお願いします。
今回は本当にありがとうございました。

お礼日時:2016/07/11 21:58

ちょっと、返事をつけやすいようにコメントを置いておきます。



今回のコードの手法は、あくまでも、Wscript.Shell オートメーション・オブジェクトを用いた方法であり、フォルダー・オプションの中で拡張子が登録してあるという前提が成り立っている中で、組み立てられたコードです。PCによって、例えば、拡張子が登録していなければ、何の意味もありません。

簡単に確認するには、エクスプローラーなどで、ファイルを選択して、クリックして、アプリが呼び出されるかどうかで決まります。

しかし、例えば、拡張子.pdf だけの話なら、本体のAcrobat Reader を呼び出せば済むことなのですし、拡張子によっていくつかのプログラムを呼び出すことも可能なのです。

また、#1 で書いている「""(ダブルコーテーション)」についても、ショートネームにすれば、不要なことなのです。もちろん、ChDir で、そのファイルのフォルダーに変更するという手もあるわけです。
Wscript.Shell を利用するのは、その一つでしかありません。
この回答への補足あり
    • good
    • 1
この回答へのお礼

返答が遅くなりすいません。
追加のアドバイスありがとうございます。

1回目のコードでバッチリです!
どうしてこんなに安定しているのか不思議です。
本当にありがとうございます。

前回のコードで解決ですがせっかくですので、
問題のエラーメッセージを貼り付けておきます。

>また、#1 で書いている「""(ダブルコーテーション)」についても、ショートネームにすれば、不要なことなのです。もちろん、ChDir で、そのファイルのフォルダーに変更するという手もあるわけです。

この件は今の私ではよくわからないのですが、ちょっとづつ勉強しようと思います。

あと前回のアドバイスで「VBScript」という言葉がありました。
これも初めて聞く言葉なので軽く調べておきます。

いつもいろいろアドバイスありがとうございます。

PS
先の通りエラーメッセージの件があるので、
一応、質問を閉じないで開けておきます。

※エラーメッセージは以下の通りです
タイピングミスはないと思いますが補足のところに画像も張り付けておきます。

「実行時エラー'-2147024894(80070002)':
'Run'メソッドは失敗しました:'IWshShell3'オブジェクト」

※今晩、No.1の答えにベストアンサーをつけて閉じる予定です。

いつも本当にありがとうございます。

お礼日時:2016/07/11 16:22

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング