• 締切済み

Word VBAにwaitに準ずる機能を使いたい

はじめまして。 複数の部署へ配布する用に大量の印刷を行っています。 以下のことをやりたいのですが、application.WaitがWordでは使えず困っています。 やりたいこと: 作成したWord文書を、コピー機(1)・コピー機(2)から交互に出力したい。 (1)と(2)の出力の間に、30秒ごとの時間を置いて出力されるようにしたい。 書いたVBA: =================== Sub テクニカルインフォメーション() '回覧紙配布のため、1号機と2号機で出力をします。 ' '  Dim waitTime As Variant   ActivePrinter = "TF1号機_1" '代営TI 60部   Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=60, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 waitTime = Now + TimeValue("0:00:30") Application.Wait waitTime   ActivePrinter = "8FMFP_2" '法規 19部   Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=19, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 waitTime = Now + TimeValue("0:00:30") Application.Wait waitTime ActivePrinter = "TF1号機_1" '代営FF 43部   Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=43, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 waitTime = Now + TimeValue("0:00:30") Application.Wait waitTime   ActivePrinter = "8FMFP" '高機能SC 40部   Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=40, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 End Sub =================== 前任者が残したExcelのVBAを参考にしたのですが、 動かずに大変困っています。 ご教授頂けないでしょうか。 いままでVBAはほとんど触ったことがなく、マクロの記録で乗り越えてきたので 基礎構文もよく理解をしていません。 不勉強で大変申し訳ないのですが、どうかよろしくお願い致します。

みんなの回答

  • hahaha8635
  • ベストアンサー率22% (801/3611)
回答No.5

https://www.sejuku.net/blog/71754#Wait 抜粋 Application.Wait Now() + TimeValue("00:00:01") Now関数で現在の時刻を取得し、TimeValue("00:00:01")を足すことで1秒処理を止めています。 Dim waitTime As Variant ← waitTime を Variant で宣言してるが https://kokodane.com/kansu_hiduke_17.htm TimeValueはシリアル値なので 型が違う Dim waitTime As Variant を けして waitTime = Now + TimeValue("0:00:30") Application.Wait waitTime ↑ すべてを Application.Wait Now() + TimeValue("00:00:30") に変えてみる

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

#3です。 補足に関して。 VBAで解決するやり方でなく、「操作や設定で解決する方法がないか」、それ(困っていること)を前面に出して、質問文を書いて、別質問したら、というのが、意見です。 ーー 日本語の文章で(ワードの熟語も交えて)書くとすれば、困っていることは、何ですか? ーー WordVBAを使っている人は少ないと(小生は勝手に思ってますが)思われるので、VBAに限定しない回答をしてもらったら。 識者が、VBAでないとできないでしょうということなら、VBAで回答が出るでしょう。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

別質問で、パソコンプリンターで、大量の印刷について困っているようだが、 それの解決法を質問したら。 VBAのコードを羅列するのでなく。  Word VBAと質問標題に書いたら、スルーする人も多いのでは。 ーー Waitの件。 Word の標準モジュールに Sub test03() 'WordVBAには、waitメソッドはありませんので、エクセルを借用 Set ex = CreateObject("excel.application") Debug.Print Now() & " スタート" ex.Application.Wait Now() + TimeValue("00:00:20") '20秒後 Debug.Print Now() & " 20秒後" ActiveDocument.Range(0, 0).Select Selection.TypeText Text:="文字を入力" End Sub ーー 表示ーイミディエイトウインドウ 2019/11/21 10:38:35スタート 2019/11/21 10:38:55 20秒後 == その間そのVBAでの処理する事項は進まず、外部のイベント(通信・接続プリンターの印刷など)は当然行われると思います。

oshio_sato
質問者

補足

回答ありがとうございます。 質問の仕方が不慣れでご不快にさせてしまい、申し訳ありません。 別の質問、というのは他の質問者様のもので同様のものがあったということでしょうか? もしあればヒントにしたいので教えてくださると幸いです。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.2

waitTime = Now + TimeValue("0:00:30") Application.Wait waitTime 上記の部分をSleep関数に変更してみてください。 以下のサイトはエクセルについて書かれていますがWordでも同じように使えるはずです。 (Wordの解説をしているサイトが見つからない) VBA【Sleep関数(API)】指定した時間分処理を止める https://e-vba.com/sleep/

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

参考URLに使えるのが書いてあります。

参考URL:
https://okwave.jp/qa/q1823400.html
oshio_sato
質問者

お礼

お返事が遅くなって申し訳ありません。 回答ありがとうございました。 URLを参考にさせていただきます。ありがとうございます。

関連するQ&A

専門家に質問してみよう