いつもお世話になっています。ちょっと前に 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
No.1ベストアンサー
- 回答日時:
最初に、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
ご解答ありがとうございます。
リンク先の説明を読んでみました。
今のところどれもあてはまるようなものがないような気がします。
正直なところよくわかりませんが。
とにかく職場のNASとWifi環境下でないと試せないので、
すいませんが詳細の説明は月曜日以降ということにさせて頂きます。
もしご面倒でなければ月曜日以降に観て頂ければ補足のところで説明します。
※質問はしばらく閉じないとおきます。
いつもご解答ありがとうございます。
No.3
- 回答日時:
>1回目のコードでバッチリです!
>どうしてこんなに安定しているのか不思議です。
思惑があたったというところですが、ファイルの種類がある程度決まっているなら大丈夫だと思います。
まあ、もしダメでも、解決方法はいくつか用意していますから、その時は、またお聞きになったらよいかと思いますが、分からなくなったら、コマンドプロンプト上で、試してみれば、だいたいのことはみえてくるはずです。
今回は本当にありがとうございます。
エラーメッセージの件ですが職場でお礼をアップした時には、
エラーメッセージがご指摘の症例だということに気が付きませんでした。
今落ち着いて読み返したところご指摘の通りで、確かにファイル名ではありませんが、
フォルダー名の一部に全角スペースがありました。
それとリンク先のページにあった「Chr(34)」と「""」が同じだということも今回初めて知りました。
前回教えて頂いた方のコードの中にも「Chr(34)」という文字があったのですが、
意味がわからないままスルーしていました。
今回は本当にありがとうございます。
VBAの本を2冊読み終え、そろそろ3冊目も読み終えます。
もうちょっと実力がついたら今まで頂いたアドバイスを読み返してみようと思っています。
今後ともよろしくお願いします。
今回は本当にありがとうございました。
No.2
- 回答日時:
ちょっと、返事をつけやすいようにコメントを置いておきます。
今回のコードの手法は、あくまでも、Wscript.Shell オートメーション・オブジェクトを用いた方法であり、フォルダー・オプションの中で拡張子が登録してあるという前提が成り立っている中で、組み立てられたコードです。PCによって、例えば、拡張子が登録していなければ、何の意味もありません。
簡単に確認するには、エクスプローラーなどで、ファイルを選択して、クリックして、アプリが呼び出されるかどうかで決まります。
しかし、例えば、拡張子.pdf だけの話なら、本体のAcrobat Reader を呼び出せば済むことなのですし、拡張子によっていくつかのプログラムを呼び出すことも可能なのです。
また、#1 で書いている「""(ダブルコーテーション)」についても、ショートネームにすれば、不要なことなのです。もちろん、ChDir で、そのファイルのフォルダーに変更するという手もあるわけです。
Wscript.Shell を利用するのは、その一つでしかありません。
返答が遅くなりすいません。
追加のアドバイスありがとうございます。
1回目のコードでバッチリです!
どうしてこんなに安定しているのか不思議です。
本当にありがとうございます。
前回のコードで解決ですがせっかくですので、
問題のエラーメッセージを貼り付けておきます。
>また、#1 で書いている「""(ダブルコーテーション)」についても、ショートネームにすれば、不要なことなのです。もちろん、ChDir で、そのファイルのフォルダーに変更するという手もあるわけです。
この件は今の私ではよくわからないのですが、ちょっとづつ勉強しようと思います。
あと前回のアドバイスで「VBScript」という言葉がありました。
これも初めて聞く言葉なので軽く調べておきます。
いつもいろいろアドバイスありがとうございます。
PS
先の通りエラーメッセージの件があるので、
一応、質問を閉じないで開けておきます。
※エラーメッセージは以下の通りです
タイピングミスはないと思いますが補足のところに画像も張り付けておきます。
↓
「実行時エラー'-2147024894(80070002)':
'Run'メソッドは失敗しました:'IWshShell3'オブジェクト」
※今晩、No.1の答えにベストアンサーをつけて閉じる予定です。
いつも本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
【EXCEL-VBA】PDFファイルを開いて印刷したい
Excel(エクセル)
-
VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません
Visual Basic(VBA)
-
VBA 実行時エラー 2147024893
Visual Basic(VBA)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
EXCEL ページを指定してPDF出力するVBAを教えてください。
PDF
-
6
VBAでホルダー内のPDFを一括印刷したい
Excel(エクセル)
-
7
vbaから他のアプリを終了
Visual Basic(VBA)
-
8
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
9
スクロールバーをVBAで操作したい
Access(アクセス)
-
10
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
11
PDFファイルを開き、印刷し、閉じるマクロ
Visual Basic(VBA)
-
12
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
13
ユーザーフォームでTextBox1にカーソルを移動したい
Excel(エクセル)
-
14
vbsからのExcelマクロ呼び出しの際に保存ダイアログが表示されてしまう
その他(プログラミング・Web制作)
-
15
エクセルVBAでPDFを作成したい
Visual Basic(VBA)
-
16
EXCEL VBAでPDFファイルを開いて印刷
Visual Basic(VBA)
-
17
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
18
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
19
ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存
Visual Basic(VBA)
-
20
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルマクロでエラーの原因...
-
access テキストボックスの値取得
-
FTPの送信結果を検知したい
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
VBでファイルが開かれているか...
-
PowerShellを使って関連付けら...
-
アクセスのクエリでコンパイル...
-
EXCELのVBAでWORDが開いてある...
-
VB6 Dir関数で52エラー発生
-
ワークブックに名前をつけて保...
-
マウントしたファイルサーバー...
-
「複数の選択範囲に対して実行...
-
ファイルクローズ(fclose)でエ...
-
他のmdbファイルのform,macro,r...
-
FORTRANの実行エラーについて
-
fgets関数のEOFの扱い方について
-
ASP.NET 2.0にてアプリが動作し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
access テキストボックスの値取得
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
gccを行ってもexeファイルが生...
-
batファイルでレジストリキーの...
-
NAS上のファイルの使用中が解除...
-
PowerShellを使って関連付けら...
-
FTPの送信結果を検知したい
-
エクセルマクロでエラーの原因...
-
「複数の選択範囲に対して実行...
-
VBでファイルが開かれているか...
-
アクセスのクエリでコンパイル...
-
fgets関数のEOFの扱い方について
-
Vba ファイル書き込み時に書き...
-
VB6 Dir関数で52エラー発生
-
VBA ExecuteExcel4Macro 型が一...
-
【COBOL】read文でエラー
-
EXCELのVBAでWORDが開いてある...
-
Access2013にてドラッグ&ドロ...
おすすめ情報
エラーメッセージの画像です