回答編集履歴

2

コメントを受けて本件の要件を理解できたので解決法を追記

2021/05/22 11:29

投稿

hope_mucci
hope_mucci

スコア4447

test CHANGED
@@ -1,6 +1,70 @@
1
+ ## 追記を受けての回答
2
+
1
- P列の値チェックをP列の全セルにかけから印刷したい、と言う要件である前提で回答します。
3
+ 質問分でまとめきれていない本来の要件は、以下のようなものだと推測します。
2
4
 
3
5
 
6
+
7
+ - bookのsheets(1)にデータシートが存在する
8
+
9
+ - 帳票用のシートがある。そのに印刷ボタンがあるが、そのシートをアクティブにして特定のマクロを実行する運用をしている。
10
+
11
+ - そのマクロを実行すると、データシートの行を上から走査し、帳票用シートの特定のカラムをデータシートの行の値に書き換え、印刷する。質問の例ではP列だけ変えていますが、おそらくもっと大量に書き換えるデータがあると推測します。
12
+
13
+ - データシートの列が最大500行ほどあり、1行処理するたびに「印刷中です」のダイアログが出るのでダイアログが大量に同時表示される。
14
+
15
+ - その際のPCの操作感低下や負荷が心配である。
16
+
17
+
18
+
19
+ まず、印刷中ダイアログそのものを非表示にすることはできません。
20
+
21
+
22
+
23
+ 現在1ページずつ行っている印刷については、
24
+
25
+
26
+
27
+ - 処理前に新規ブック作成
28
+
29
+ - データシートの行ごとに、値を書き換えたらWorksheet.Copyメソッドで新規ブックにシートをコピーする
30
+
31
+ - データシートの全行処理が終了したら新規ブックのPrintOutメソッドを実行する。
32
+
33
+ - 新規ブック削除
34
+
35
+
36
+
37
+ という流れにすれば一応一度の印刷処理で全シートが印刷できますが、最大500シートともなると相当なメモリ量が消費されると思います。一応メモリが許す限りシートを作成できる仕様となっているようですが、現物を確認しないと足りるかどうかは判断できません。
38
+
39
+ 処理中の負荷は現在の方法で単純に印刷するよりも相当高いと考えます。
40
+
41
+
42
+
43
+ PCやプリンターに対する負荷だけで考えれば、現在の方法が最も負荷が低いと思います。
44
+
45
+ ただ、印刷処理が完了するまではPCで他の作業をしないようにしたほうが予期せぬトラブル防止のためにも良いかと思います。
46
+
47
+ (プリンタでの印刷が完了、ではありません。PCからプリンタに送る印刷データの作成が完了するまで、という意味です)
48
+
49
+
50
+
51
+ そもそも、500ページ分の印刷ともなると個人PCで行う作業ではありません。途中で用紙も足りなくなるでしょう。何等かのレポートサーバを作ってそちらに行わせる作業です。ただ、このためにサーバを立てるノウハウも費用もないかと思われます。
52
+
53
+
54
+
55
+ なので、結局おススメの方法は、現状の方法で印刷処理が完了するまで待ってもらうのが最も現実的な運用だと思います。
56
+
57
+ もしくは、この帳票を印刷する専用のパソコンを用意し(ぼっこいPCで良い)、印刷処理だけそのPCでやってもらうような運用でしょうか。
58
+
59
+
60
+
61
+
62
+
63
+ ## 追記前の回答
64
+
65
+
66
+
67
+ P列の値チェックをP列の全セルにかけてから印刷したい、と言う要件である前提で回答します。
4
68
 
5
69
 
6
70
 

1

文章が不自然に切れているので保存しなおし

2021/05/22 11:29

投稿

hope_mucci
hope_mucci

スコア4447

test CHANGED
@@ -1,4 +1,6 @@
1
1
  P列の値チェックをP列の全セルにかけてから印刷したい、と言う要件である前提で回答します。
2
+
3
+
2
4
 
3
5
 
4
6