こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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はほとんど触ったことがなく、マクロの記録で乗り越えてきたので
基礎構文もよく理解をしていません。
不勉強で大変申し訳ないのですが、どうかよろしくお願い致します。

投稿日時 - 2019-11-20 20:34:06

QNo.9681275

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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")
に変えてみる

投稿日時 - 2019-11-22 02:52:16

ANo.4

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

投稿日時 - 2019-11-21 17:54:02

ANo.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での処理する事項は進まず、外部のイベント(通信・接続プリンターの印刷など)は当然行われると思います。

投稿日時 - 2019-11-21 11:03:59

補足

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

投稿日時 - 2019-11-21 11:52:29

ANo.2

waitTime = Now + TimeValue("0:00:30")
Application.Wait waitTime

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

投稿日時 - 2019-11-20 20:59:21

ANo.1

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

参考URL:https://okwave.jp/qa/q1823400.html

投稿日時 - 2019-11-20 20:50:23

お礼

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

投稿日時 - 2019-11-21 11:41:18

あなたにオススメの質問