🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Q&A

2回答

1456閲覧

フォルダ内のPDFすべてを開きたいのですが、一つ開いたところで処理が終わってしまう

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

0グッド

0クリップ

投稿2021/02/07 04:18

編集2021/02/08 14:13

Private Sub CommandButton4_Click()

Const WF3 As String = "C:\Users\aaa\Desktop\test\" '図面データ Dim strPDFName As String If UserForm1.TextBox1.Value = "" Then MsgBox ("製番が入力されていません") Else '拡張子が「.pdf」のファイルを、Dir関数で取得 folder_name = "*" & TextBox1 & "*" strFolderdir = Dir(WF3 & folder_name, vbDirectory) strFolderPath = WF3 & strFolderdir strPDFName = Dir(strFolderPath & "\" & "*.pdf") If Dir(WF3 & folder_name, vbDirectory) <> "" Then '拡張子が「.pdf」のファイルがある限り、処理をループ Do While strPDFName <> "" 'PDFファイルを開く CreateObject("Shell.Application").ShellExecute strFolderPath & "\" & strPDFName '次のPDFファイル名を取得 strPDFName = Dir() Loop Else MsgBox "該当図面は存在しません" End If End If

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/07 04:53 編集

間違った
m.ts10806

2021/02/07 06:12

まず自身が思ったように組んでみてください。 「コードください」は質問ではないです。作業依頼です。
Y.H.

2021/02/07 06:25

> textbox1内に入力した文字を検索 どこから検索する?ファイル名?PDFファイル内の文章?
退会済みユーザー

退会済みユーザー

2021/02/07 06:27

textboxからです。 ファイル名を検索します!
m.ts10806

2021/02/07 06:28

質問は編集できますし、前の質問で十分なのでは。 回答はしましたが。
退会済みユーザー

退会済みユーザー

2021/02/07 06:42

↑前の質問だと意味が違ってますよ。
Zuishin

2021/02/08 04:21

その PDF ファイルはあちこちに散らばっているんですか? それとも一か所にまとまっているんですか?
退会済みユーザー

退会済みユーザー

2021/02/08 14:14

質問をわかりやすく変更しました。 タイトルの通りです。よろしくお願いします。
Zuishin

2021/02/08 14:39

処理が終わってしまうというか、ShellExecute で止まってるんじゃないですか? PDF を閉じると続行しませんか?
Zuishin

2021/02/08 14:47

おっと、ShellExecute は実行終了を待ちませんね。間違えたようです。 関数の中の一行目を選択して F9 を押してみてください。 そうするとその行に赤丸がつきます。 そのまま関数を実行してください。 すると、赤丸の行で一時停止します。 それから F8 を押すたびに一行ずつ実行されるので、どのような流れで実行されるのか見てください。
Y.H.

2021/02/08 14:48 編集

If Dir(WF3 & folder_name, vbDirectory) <> "" Then が strPDFName = Dir(strFolderPath & "\" & "*.pdf") のループを壊してるので一回しか回らないです。(*.pdfが1つ以上あった場合)
Zuishin

2021/02/08 22:37

言われてみれば Dir がたくさんありますね。 インデントが無いので処理を追っていませんが、Dir の使い方がわからず同じ流れで何度も呼んでいたということだったんですね。思いもよらない使い方でした。 知らない関数はまず使い方を調べるのが良いと思います。適当にコピペを組み合わせ、動くかどうかは運任せのようなやり方をしていたのでは、作るのに人の数倍の時間がかかるので無駄です。
guest

回答2

0

VBA

1If Dir(WF3 & folder_name, vbDirectory) <> "" Then

なんでここでDir(WF3 & folder_name, vbDirectory)しているのかよくわらないです
Dir(strFolderPath & "\" & "*.pdf")の結果でループしたいのに、こんなところで
Dir(WF3 & folder_name, vbDirectory)呼び出しているからpdfファイルでのループじゃなくなってる。
ここでは*.pdfが存在するかチェックしたいのだからこう↓じゃないの?

VBA

1If strPDFName <> "" Then

投稿2021/02/08 14:31

Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/08 14:37

textbox1に入力した文字で部分一致したフォルダが見つかればそのフォルダからPDFファイルを探し出すと言う意味でそこに If Dir(WF3 & folder_name, vbDirectory) <> "" Then を入れていました。
Y.H.

2021/02/08 14:42 編集

それは folder_name = "*" & TextBox1 & "*" strFolderdir = Dir(WF3 & folder_name, vbDirectory) strFolderPath = WF3 & strFolderdir strPDFName = Dir(strFolderPath & "\" & "*.pdf") この4行でやってるのでは?
退会済みユーザー

退会済みユーザー

2021/02/08 14:41

すみませんそうなると フォルダがない場合 MsgBox "該当図面は存在しません" を表示するにはどのような記述が正しいのでしょうか。
Y.H.

2021/02/08 14:43

であれば、これ↓を実行する前に判定しましょう。 strPDFName = Dir(strFolderPath & "\" & "*.pdf") この行はフォルダーが存在した場合に実行すべき処理なので。
Y.H.

2021/02/08 14:49 編集

全体の処理順は以下になるのでは? ・フォルダーが存在するかチェックする ・フォルダーが存在しない場合、エラーメッセージを表示し終了する。 ・フォルダーが存在した場合、*.pdfを検索する。 ・*.pdfが存在しない場合、エラーメッセージを表示し終了する。 ・*.pdf がなくなるまでループし 該当した*.pdfを開く
Y.H.

2021/02/08 14:52 編集

結局私の回答の通りやってみました? 「該当図面は存在しません」の判定はフォルダーが存在しない場合のみになるけど とりあえず動くようにはなると思うんですが・・・
退会済みユーザー

退会済みユーザー

2021/02/08 21:57

ありがとうございます! 動くようになりました。 レスポンス早く分かりやすい回答助かりました!
guest

0

ToStringで文字列にしてInStrで検索して見つけたら開けばいいです。

投稿2021/02/07 04:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/02/07 06:11 編集

VBAにtoStringという名前の機能は存在しないし、 質問に対して何をこたえているのか不明。 なぜこの内容で回答しようと思ったのかわかりません。
退会済みユーザー

退会済みユーザー

2021/02/07 06:22

お前の方が答えになってないじゃん。
m.ts10806

2021/02/07 06:28 編集

「方が」というほどあなたがまともなコメントをしているようには思えませんが。この方に対してのことを言っているのなら、「丸投げが過ぎるので答える必要がない」とあなたの行為と同じ判断をしているだけです。 ひとまず自慰回答をやめなさい。
退会済みユーザー

退会済みユーザー

2021/02/07 07:53

いやいや俺の回答はヒントになってる。 お前は糞みたいな価値観を押し付けてるだけ。 糞を押し付けるのはやめなさい。
Zuishin

2021/02/08 14:50

どの辺がヒントになっていますか? ToString も InStr も必要ないようですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問