• ベストアンサー

vba pdfファイル順番に印刷

セルC5から、下にファイル名が入っています。上から順に印刷したいのですが、下記だとvbaが動かないです。 Dim z As Object Dim i As Long Dim f, p As String Set z=CreateObject("WScript.Shell") p=Application.ActivePrinter For i=5 To Range("C1").End(xlDown).Row f="C:¥フォルダパス" & Cells(i,1).Value & ".pdf" ここから、行ごとに進んだ時に、黄色くならず反応しませんでした↓ If Dir (f)<>""Then z.Run("Acrobat.exe /t" & f) ↓ここにとびました。 Else End if Next i Set z=Nothing End Sub それ以前に、adobe acrobatが、更新されてから動いていたバッチファイルですら反応しなくなりました Adobeの環境設定をネットで見た通り見直ししたりしたのですが、全く成功しません。フォルダ内のpdfファイルを、全て印刷するvba(Acrobat.exe)を記載しない方法は成功したのですが、どうすれば、上手くいきますか? 教えていただきたいです。印刷の順番を指定したいです。 初心者なのでお手柔らかにお願いします。ちなみに動いているほうのvbaは下記です。 フォルダ内のファイルを全て印刷する、(順番関係なし)です。 Dim FolderPath As String Dim Filename As String Dim objShell As Object Dim objFolder As Object Dim objFile As Object FolderPath=ThisWorkbook.Path Set objShell=CreateObject("Shell.Application") Set objFolder=objShell.Namespace(ThisWorkbook.Path) For Each objFile In objFolder.items If Right(objFile.Name,4)=".pdf"Then objFolder.ParseName(objFile.Name) .InvokeVerbEx("print") End If Next objFile Set objFile=Nothing Set objFolder=Nothing Set objShell=Nothing End Sub 上記は全てネットから引用しています。 adobe acrobatを使うと反応しないので下記、上記に付け足ししたりして自身で初めて考えました。 Sub Test() Dim FolderPath As String Dim Filename As String Dim objShell As Object Dim objFolder As Object Dim objFile As Object FolderPath=ThisWorkbook.Path Set objShell=CreateObject("Shell.Application") Set objFolder=objShell.Namespace(ThisWorkbook.Path) For i=5 To Range("C1")End(xlDown).Row ObjFile.Name=FolderPath&Cells(i,1).value&".pdf" If Dir objFile.Name<>""Then objFolder.ParseName(objFile.Name).InvokeverbEx("print") Else End if Next i Set objFile=Nothing Set objFolder=Nothing Set objShell=Nothing MsgBox"印刷が完了しました" End Sub どこか文書変でしょうか?? 添削してくださいませんか。 順番に印刷、、できるとすごく仕事がはかどるため、成功させたいです。 お力添え、何卒お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.19

順番がバラバラになるのはそれぞれの印刷の時に少し間をおいてやるといいかもしれません 印刷の前か後に DoEvents を入れるか Application.Wait Now() + TimeValue("00:00:05") 上記は5秒待ち みたいな感じで間をあけます。 今スマホなので具体的に回答できませんが使い方は検索してみてください。

123mi123
質問者

お礼

おおおおお!!! 神様ーーーー😆🥺😆‼️ ありがとうございますっ✨

Powered by GRATICA
123mi123
質問者

補足

調べたり試したりで2時間(少なめに言った気がします、ご飯はちゃんと食べました)!は使いました!病的!! でも、10秒置いたら安定して順番確保できました!!! (長すぎ。20枚印刷で3分かかるやん。でも安定をとりたい) めちゃくちゃ感謝です😂😂😂!!! 本当に仕事が忙しくてパソスキル低い私は不安で!! 少しずつ、環境整えて多忙期に備えたかったんです。 まだまだ整えたい部分あります。 どんどん改善していきたいです。 また、困難があった際はぜひお力添えお願いいたします。 本当に感謝です。 今回は本当にどーにもこーにも、、、でした!!できたことが嬉しすぎて!!! やばいです。夜だしテンションあげー!!!!ねます。爆睡 恥ずかしながら、今まで孤独にしてましたので、色々聞けて本当に嬉しかった。。。し返信があるため、諦めず、できました。というかほぼやってもらった。。 神!長々とすみません。 ありがとうございました。

その他の回答 (18)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.18

f=FolderPath&"¥"& cells(i,1).value 今気が付いたのですが「¥」が変な気がします。VBEにコピペしたら「\」になるので気が付かなかったのですが、私のコードからコピペして「\」を変更してないですよね。画面上は逆スラッシュ「\」に見えていると思いますがVBEにコピペしたら「¥」です。見てわかるようにこの回答では「\」と「¥」はわざと全角で入れてます。 もしかして補足の時に「¥」と書き替えているのでしょうか。

123mi123
質問者

補足

¥、ですよね?? それはわかっていまして。 それにパソコンはネットに繋げてない、Windows7なんです だからコピペしてません。 めっちゃ打ってる 時間もそれでかかってる。笑。 ここに質問するときも、1から。。。売ってます携帯で

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.17

ふと思ったのですが、ファイル名リストのあるシートが見えている状態で実行してますよね。別シートが見えていてそのシートのデータを取得していればファイルが無いということになったりします。

123mi123
質問者

補足

今日は本当に嬉しい。こんな親切な人に出会えて。 ちょっと、、、つまずいて、 ますね、今 そして集中も切れてます 1からしっかり回答してくださったのを、時間かけて試しますm(__)m

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.16

> 初めはみんな、知らないでしょ? はい、うまくいかないのをどうにかしながら覚えていくのだと思います。 データを最小限(たとえば1個とか)にして試してみるとかもありかもしれません。 "C:\Ok\pdfytest" と "C:\Ok\pdfytest\test.pdf" の部分を実際にあるフォルダ(テスト的に作成しても可) とpdfファイルを指定して実行してみるのも何か気づくもとになるかもしれません。 以下がうまくいったら pdfPath = "C:\Ok\pdfytest\test.pdf" を pdfPath = FolderPath & "\" & "test.pdf" にして確認するとかみたいにして一歩ずつ進めていくのも手です。 Sub TestTest() Dim FolderPath As String Dim Filename As String Dim objshell As Object Dim objFolder As Object Dim pdfPath As String Dim pdfFileName As String Dim i As Long FolderPath = "C:\Ok\pdfytest" '←ここ Set objshell = CreateObject("Shell.Application") Set objFolder = objshell.Namespace("C:\Ok\pdfytest") '←ここ For i = 5 To 5 pdfPath = "C:\Ok\pdfytest\test.pdf" '←ここ If Dir(pdfPath) <> "" Then pdfFileName = Mid(pdfPath, InStrRev(pdfPath, "\") + 1) objFolder.ParseName(pdfFileName).InvokeVerbEx ("print") Else End If Next i Set objFolder = Nothing Set objshell = Nothing MsgBox "印刷が完了しました" End Sub 「腹が減っては戦はできぬ」ということわざもあったと思いますからまずはご飯にしてください。

123mi123
質問者

補足

あの、全部F8で、飛んでたらファイルがない、とか細かく教えてもらい、動くし、印刷されるように!!!なりました😄 パスは、ディスワークパス(←これに、こだわってます、フォルダの中にエクセルを置けばその中のファイルが印刷されるので😄😄! カンペキ!!なんですが。。。 やはり、エクセルのC列5行目から拡張子付、ファイル名には連番をつけ昇順に並べたのを、上から下へいってるはず!!なのに 印刷の順番がバラバラです。。。 細かく分析すると、ファイルが大きいものは一番最後にプリントされました。 なかなか、、順番に印刷するのは難しいんですかね。。。 長らくお付き合い頂き、プリントできた時は涙がでました!すぐに報告したく!!!次は順番を揃える、、、を強化するため、調べてみます!!!

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.15

あと F8で1行ずつステップ実行して If Dir(pdfPath) <> "" Then のつぎに pdfFileName = Mid(pdfPath, InStrRev(pdfPath, "\") + 1) が実行されずに Else まで飛ぶとしたらファイルが無いと判断されているという事なので pdfPath = FolderPath & "\" & Cells(i, 1).Value ' & ".pdf" の後に MsgBox pdfPath Debug.Print pdfPath を追加して 正しくファイルパスとファイル名が出来ているのか目視で確認してみるとかの操作が必要だと思います。

123mi123
質問者

補足

なるほど とぶのはファイルがないと、、 レベルに見合ってないかもしれないけど、諦めたくない つぎはぎでも、何個か作ったし 今実際活用してるんです 初めはみんな、知らないでしょ? 本当に根気よく付き合ってくださり、ありがとぅございます。 かなりの時間を費やしてます

回答No.14

冒頭しか見てないので、良く分かりませんが、「そもそも論」で言うと、VBAである必要性は全く無いわけで、PDFを一括印刷したいのであれば、自分の実力に見合わない方法で実現するのではなく、別の方法を模索すべきです。 ↓なら、おそらくは実現出来るんじゃなかろうかとは思います。 https://www.microsoft.com/ja-jp/biz/smb/column-power-automate-desktop 画面上でフローを組めるので、お勧めはしますけども、私は使った事はありませんので、使い方はググったり、YOUTUBEで、探してみてください。もしかしたら、実現出来ないって事もあるかもですので、自己判断で決めてください。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.13

とりあえずこちらの状態を添付画像付きでお知らせします。 A列は5行目からファイル名がC列は1行目からデータが入っています。 上半分がエクセルの状態で下半分がプリンターに送られたデータ(下にあるのが先に送られてきたデータ)の状態です。

123mi123
質問者

補足

涙、、、 何度もトライしてるけどわからなくて涙涙、、晩御飯も、つくらないと、、、

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.12

> あとはどのへんが、、、 > なおしましょう?? こちらでは正常に動作しますからなんともいえません。 > 全てを印刷する、ができてるので。 全てができるのでしたら、リストのファイルがFolderPathで指定しているフォルダに無いのではないでしょうか。 また、A列の5行目からリストを見ているのになぜC1から下向きにC列の最終行まででループしているのかは不明ですが。 C列の5行目までに空きセルがあれば印刷はしないと思います。 どちらにしても、こちらでは見えない部分の話になるのであとはゆずさんが原因を探すしかないと思いますよ。

123mi123
質問者

補足

わかりました。 ありがとうございました

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.11

> 書いてもらった文だと、反応しません。すみません 質問のコードでは ObjFile.Name=FolderPath&Cells(i,1).value&".pdf" リストのファイル名の後に.pdfを付けている となっていたので pdfPath = FolderPath & "\" & Cells(i, 1).Value & ".pdf" と拡張子に関してはそのままにしてましたが > リストには拡張子もついてます!! でしたら pdfPath = FolderPath & "\" & Cells(i, 1).Value & ".pdf" は pdfPath = FolderPath & "\" & Cells(i, 1).Value ですね。 こちらではリストは見えませんので元のコードを見て判断してます。

123mi123
質問者

補足

あ、自己判断で、そのコードにはしてました!!! 長いお付き合いすみません 本当に完成させたいです これで仕事が数倍早くなる気がします あとはどのへんが、、、 なおしましょう??

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.10

> まだあきらめません!! プリンタが正常になったら 回答No.6のコードでいけると思いますよ。

123mi123
質問者

補足

いや、プリンタは正常です。 全てを印刷する、ができてるので。 書いてもらった文だと、反応しません。すみません

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.9

> 全くプリントに繋がらなくなりました。。。 仮想プリンタがどのようなものかわからないのですが、プリンターのジョブがたまりすぎたのではないでしょうか。 ジョブを削除出来たら削除してみてはいかがでしょう。 PCを再起動するとかもありかもしれません。

123mi123
質問者

補足

ていうか長々とお付き合いいただいて本当に親切なかたです!ありがとうございます 本を買って読んだりネット探したり、vbaできる人ってすごい時間をかけてるんでしょうか。。。 ひとつ仕上げるのにすごく時間かかります  まだあきらめません!!