• 締切済み

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% (800/3609)
回答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/17068)
回答No.4

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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
  • ベストアンサー率65% (1606/2443)
回答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

  • エクセル VBA 自動処理の途中終了について

    エクセルで単語のフラッシュカードを自動表示させたいと考えています。 エクセルの1セルの大きさを縦最大、横120位に広げ、C列に単語、D列に意味を縦に並べ、 C2 1秒後 D2 1秒後 C2 1秒後 D2 1秒後  C3 1秒後 D4 のように単語と意味を交互に2度ずつ表示させます。 For Next を使い表示はできるようになりましたが、途中で止めたいときに、escを押すと For Nextの処理を最後まで一気に行ってから止まってしまいます。 C5を表示していたら、その場所でPause をし、スタートボタンで再度継続して表示したいと思います。また、単語や意味のセルにはそれぞれ別の文字装飾をしてあるので、(赤や青、大きさなど) セルを移動して表示したいと考えています。 実は他のサイトでも質問しましたが、思ったような回答を得られませんでした。よろしくお願いします。 Sub セル移動() Dim waitTime As Variant i = 0 Range("c2").Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Range("c3").Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime For i = 1 To 50 ActiveCell.Select Selection.Offset(0, 1).Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Selection.Offset(0, -1).Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Selection.Offset(0, 1).Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Selection.Offset(1, -1).Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Application.OnKey ("{esc}"), "shuryo" i = i + 1 Next i End Sub Sub shuryo() Application.ScreenUpdating = False Range("c2").Select Application.GoTo reference:=ActiveCell, scroll:=True Application.ScreenUpdating = True Exit Sub End Sub

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • VBでプリンターを選ぶ

    プリンターが数台あり、用紙によって、プリンターをVBで選ぶことをしていますが、一度OKになったVBが、数日立つとなぜかエラーになってしまいます。プログラムは、オートで作成したのですが下記のようになっております。下記で、[']の命令は、前回はOKであったのですが、本日はエラーになった分です。どなたかどうすればよいか教えてください。 Application.ActivePrinter = _ "\\FMV-DESKPOWER\RICOH imagio Neo 452 RPCS on Ne04:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "\\FMV-DESKPOWER\RICOH imagio Neo 452 RPCS on Ne04:", Collate:=True 'Application.ActivePrinter = ' "\\FMV-DESKPOWER\RICOH imagio Neo 452 RPCS on Ne03:" 'ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ ' "\\FMV-DESKPOWER\RICOH imagio Neo 452 RPCS on Ne03:", Collate:=True

  • Waitメソッド なぜブール型?

    エクセルvbaを勉強中の者なのですが Sub Sample() Application.Wait (Now + TimeValue("00:00:01")) End Sub このコードのWait メソッドのヘルプを見たのですが、 戻り値がブール型 (Boolean)になっています。 そもそもメソッドなのに、ブール型 ってあり得るのでしょうか? ブール型って、trueかFalseが返るってことなんですよね? 上記コードは、どうやればtrueかFalseが返るのでしょうか?

  • エクセル VBA シート毎に同じ動作をしたい・・・

    エクセルVBAでシート毎に同じ動作をしたいのです。 例えば A・B・C・D・E とシートがあるのですが、A以外のものを全部印刷したいのです。 今までは Worksheets("B").Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True Worksheets("C").Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True と これを繰り返していたのです。 これをやると文章も長くなりますし、シート名が変わったときには、VBAもすべて書き直しと言う状況になってしまいます。 何か打開策はありますでしょうか? よろしくお願いいたします。

  • EXCEL VBAでプリンタの設定方法について

    EXCEL VBAのプリンタの設定方法について質問があります。 Dim oApp As Object Dim WFM As Strin WFM = "\\Cl111\フォルダ\ファイル\" &Range("C3").Value & ".doc" Set oApp = CreateObject("Word.Application")  ’ワード起動 oApp.Visible = True oApp.Documents.Open WFM  ’文書を開く Application.ActivePrinter = "AAA on Ne00:"  ’プリンタ設定 oApp.activedocument.PrintOut Copies:=1, Background:=False  ’印刷 oApp.Quit SaveChanges:=False  ’ワード終了 Set oApp = Nothing このようなコードで、(1)ワードを開き、(2)プリンタを設定し、(3)印刷をする、という作業をしたいのですが、 Application.ActivePrinter = "AAA on Ne00:" ではプリンタの設定が変わらず、通常使うプリンターで印刷がされてしまいます。 ワードを開いて印刷することで何か特殊なコードが必要なのではないかと思うのですが、調べても該当するものが出てきませんでした。 どうぞよろしくお願いいたします。

  • VBAでエクセルの表をワードに入力

    Excel/Word2002使用です。 ワードへの入力を自動化するためにVBAを使用してエクセルの表をワードのテンプレートに渡したいのですが。 エクセルのA1:C8のセルに表として値が入力されています。 この表をコピーしてワードに貼り付けます。 ワード側は何も入力されていない文書ですが、 テンプレートが用意されているので、このテンプレートを指定してワードを立ち上げます。 ワードに貼り付けられる表はタブ区切りです。 具体的には下記コード3行目の”winword.exe”を具体的なテンプレートのパス名にしたいのですが・・・ Sub word貼り付け() Dim mytskID As Double Range("A1:C8").Copy  mytskID = Shell("winword.exe", vbNormalFocus)  Application.Wait Now + TimeValue("00:00:10")  Application.SendKeys "^v", True  Application.Wait Now + TimeValue("00:00:10")  Application.SendKeys "%fa", True  Range("A1").Copy  AppActivate mytskID  Application.SendKeys "^v", True  Application.SendKeys "~", True  Application.Wait Now + TimeValue("00:00:05")  Application.SendKeys "%fx", True  Application.CutCopyMode = False MsgBox "完了しました" End Sub なお、上記コードも教科書通りにしたはずなのですが、 何故か「名前をつけて保存」のSendKeys "%fa"のときだと思うのですが、 ワード側ではファイルメニューの罫線が反応してしまいます。 あわせてご教授いただければ幸いです。 よろしくお願いします。

  • マクロ 連続印刷

    マクロ初心者です。 ピボットテーブルでマクロを使って連続印刷をしようと思いました。 一応やってみて連続で印刷は出来たのですが番号がないときエラーになってしまします。 たとえば"562"という番号がないときエラーになって止まってしまいます。 番号がないときは飛ばして印刷するにはどのようにしたらよいでしょうか? よろしくお願いします。 Sub 連続印刷() ' ' 連続印刷 Macro ' ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").ClearAllFilters ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").CurrentPage = _ "562" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").ClearAllFilters ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").CurrentPage = _ "947" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").ClearAllFilters ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").CurrentPage = _ "950" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").ClearAllFilters ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コンポコード").CurrentPage = _ "952" End Sub

  • Excel VBAで自動印刷プログラムの作り方を教えて下さい。

    あるファイルにある全てのグラフを印刷するマクロを作りたいのですが、 どのようにすれば良いのでしょうか? Sub Macro2() ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub に何を付け足せば良いのでしょうか? 何卒よろしくお願い致します。

  • Excelの三つのVBAを一つにまとめる。

     初めまして、よろしくお願いします。当方全くの素人でVBAの基礎もよくわからず、ネットから拾ってきていじった三つのVBAがあります。この三つ、一つ一つは個別に機能するのですが、VBAとして正しいのかさえよく解っていません。この三つを一つにまとめて、同時に機能するようにしたいと頭を抱えています。 Sub TEST() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Range("b10:b20").Insert shift:=xlShiftToRight Range("b10:b20").Value = Range("a10:a20").Value Application.OnTime TimeValue("09:00:00"), "TEST" Application.ScreenUpdating = True Application.EnableEvents = True ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST1() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c30:c40").Copy Range("d30:d40").PasteSpecial Paste:=xlPasteValues Range("b30:b40").Copy Range("c30:c40").PasteSpecial Paste:=xlPasteValues Range("a30:a40").Copy Range("b30:b40").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("01:00:00") Application.OnTime nextTime, "TEST1" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST2() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c50:c60").Copy Range("d50:d60").PasteSpecial Paste:=xlPasteValues Range("b50:b60").Copy Range("c50:c60").PasteSpecial Paste:=xlPasteValues Range("a50:a60").Copy Range("b50:b60").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("00:10:00") Application.OnTime nextTime, "TEST2" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________  解る方、よろしくお願いします。

専門家に質問してみよう