アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAにて指定したセルをプルダウンで別シートリストから選択できるようにして、一括印刷をかけるコードになります。

このコードの意味を教えて下さい。
いつもこれを使って印刷してるのですが、時折記入ミスに気付かぬまま印刷をかけ途中で止める事が出来ずに最後まで印刷してしまう事があり、途中で止めるコードの書き方を知りたいです。


Sub 印刷()

Dim c As Range
Dim Ws As Worksheet
Set Ws = Sheets("実績表紙")

For Each c In Sheets("データ").Range("A2:A102")
Ws.Range("c4").Value = c.Value

DoEvents
Ws.PrintOut
Next
End Sub

A 回答 (5件)

確認していませんが、以下では如何でしょうか?


1つ1つの印刷の間にWaitを持たせて、実際にプリンタで印刷されるタイミングと
だいたい合わせています。(以下だと4秒待ち)
各自の環境で1回あたりに掛かる印刷の時間は変わりますので、ご自身でWait時間は調整してください。
(多分、ESCで止まるはず。)

Sub 印刷()

Dim c As Range
Dim Ws As Worksheet
Set Ws = Sheets("実績表紙")

For Each c In Sheets("データ").Range("A2:A102")
Ws.Range("c4").Value = c.Value
Application.Wait Now() + TimeValue("00:00:04")
DoEvents
Ws.PrintOut
Next
End Sub
    • good
    • 0
この回答へのお礼

時間で調整出来るようなら、対応可能ですね。
DoEvents +グローバル変数を組み合わせたりするとキャンセル処理が簡単との記事を発見したので勉強して行く行くは出来る様になりたいと思います。
ありがとうございました。

お礼日時:2020/07/19 01:49

こんばんは



すでに回答は出ていると思いますが、VBAの実行中に停止させる方法を何通りか解説したサイトがありますのでご参考までに。
https://www.excel-chunchun.com/entry/2019/01/13/ …

一方で、プリンター側にある程度のメモリがあるタイプの場合、停止させてもかなりの部分はすでに送られている可能性があります。
対策については、No4様がすでに言及なさっていますので省略します。
    • good
    • 0

こんばんは、横から失礼します。



>できれば間違えに気付いた際にESCか何かのキーでマクロを止める事ができるのが1番良いのですが、、、
DoEvents ESCで止まらないかな。
しかし、ジョブにあるデータは印刷されてしまうと思いますが。

回答ではありませんが、ご質問のプロセスをAPIなどで実装出来たとしても
根本的な解決には成らないのではないでしょうか?

記入ミスを発見した時にはそれまでの印刷が実行されている訳ですし、、

記入ミスがあったら実行できないプロセスを追加するべきと考えます。

特に複数条件での一括処理などをする場合、入力や条件設定に問題ないかを
チェックするプロセスは、必須だと思いますので。
    • good
    • 0
この回答へのお礼

根本的な解決には、記入ミスを無くすのが1番なのですが、条件を指定する複雑なコードは書けないので、VBAを勉強して出来る様に頑張ります。

お礼日時:2020/07/19 01:34

こんな感じは如何でしょうか?


10回ごとに確認メッセージが表示され、キャンセルするとVBAを停止します。
(多分、ちゃんと動くはず)

Sub 印刷()

Dim c As Range
Dim Ws As Worksheet
Dim i As Long

Set Ws = Sheets("実績表紙")

i = 0
For Each c In Sheets("データ").Range("A2:A102")

If i = 10 Then
If MsgBox("継続しますか?", vbOKCancel) = vbOK Then
i = 0
Else
Exit Sub
End If
End If

Ws.Range("c4").Value = c.Value
Ws.PrintOut

i = i + 1
Next
End Sub
    • good
    • 0
この回答へのお礼

おー確かに10回ごとに聞き返してくれると間違いに気付いた際はとても助かります。
でもほとんどの確率で間違えている事がなく、10回ごとに聞かれると印刷を終えるのに少し手間がかかってしまうので、できれば間違えに気付いた際にESCか何かのキーでマクロを止める事ができるのが1番良いのですが、、、
贅沢言って申し訳ありません。

お礼日時:2020/07/19 01:03

VBAの実行自体は一瞬で終わって、


プリンタ側のキューとして溜まっているのではないですか?
もし、そうならプリンタのプロパティからキューを削除すればいいような気がします。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
キューを1つ1つ終了するのはどんどん進んでしまっているので間に合わないです。
なので途中で何かボタンを押すと止まる仕組みが作りたいのです。

お礼日時:2020/07/19 00:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています