
Windows2000,Excel2000(SP3) です。
Excelで表を印刷しようとしています。
Sheet1 に印刷するレイアウトを作成し CheckBoxを配置
してあります。
Sheet2 にデータが入っており VBAでそのデータを Sheet1
に展開して印刷するプログラムを書きました。
(もちろんCheckBoxにも値を設定してます)
最初のページはちゃんと出力されるのに、2ページ目から
CheckBox のチェックが1ページ目と同じものが印刷され
てしまいます。
VBA が終了した時点では、CheckBoxのチェックは正しいの
ですが(画面上で確認)プリントアウトは1ページ目と同じものです。
Application.ScreenUpdating=True(画面再描画)とか
Calculate とかやって見ましたがダメでした。
オブジェクトの表示が正しく印刷されるようにするにはどうしたら良いか教えてもらえないでしょうか?
No.5ベストアンサー
- 回答日時:
wildcat888さん、こんにちは。
外したようでスミマセン。
環境が違う(Win95+Excel97)せいでしょうか、#4で提示されたソースはこちらでは問題なく印刷されました。
ActiveWindow.SelectedSheets.PrintOut を Sheet1.PrintOut や Worksheets(1).PrintOut に変更しても同じでしょうか?
印刷部分をシートコピーとかにしたら、変更されたシートが出来るのでしょうか?
Private Sub Sub_insatu()
'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
ActiveCell.Activate
Worksheets(1).Copy after:=Worksheets(1)
End Sub
あとは、DoEvents とかを入れてみるとか。。
Private Sub CommandButton1_Click()
For n = 1 To 5
Range("A1").Value = n
m = Range("A1").Value
TextBox1.Value = m
DoEvents
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next n
End Sub
この回答への補足
ご指摘のとおりに、Worksheets(1).PrintOut にしてみたり、DoEvents を入れて試してみましたが、状況は変わりませんでした。
Excel97 では大丈夫なんですか?
どうしてこうなるんでしょうネ?
No.7
- 回答日時:
>ご指摘のとおりに、Worksheets(1).PrintOut にしてみたり、DoEvents を入れて試してみましたが、状況は変わりませんでした。
ですか・・・・・・・・・・・・。
私の場合、Win2000+Office2000では
流れとDoEventsの挿入個所によっては
解消したのですが。
>問題となる部分(CheckBoxに対する処理部分)のソースを簡略化し(出来れば動く形で)提示された方が解決しやすいと思います。
と思います。そのままのソースでももちろんいいですが。
DoEvents で解決したとのことなので、こちらも色々なところに挿入してみたところ解決してしまいました。
オブジェクトの更新はExcelではなくWindowsが行っているという事なのでしょうか?
DoEventsで制御をVBAからWindowsに返してあげないとオブジェクトが更新されないのかなと漠然と考えています。
なんにせよおかげ様で問題解決しました。
ありがとうございました。
wildcat888さんとpapayukaさんのお二人には感謝、感謝です。
No.6
- 回答日時:
No4のものです。
papayukaさんありがとうございます。
「DoEvents」
を挿入することによって、「タイムラグ」を
解消できました。
制御を他に移すのですね。
kon3さんのCheckBoxがどのように扱われているのかが
具体的にはわからないのですが、
適切な個所に「DoEvents」を挿入すれば、
「タイムラグ」を解消できると思います。
少し単調な例ですが、CheckBoxを含んだ場合についても
確認してみました。参考になれば。
まず
CommandButton1,CommandButton2,CommandButton3,
CheckBox1,CheckBox2,CheckBox3,
TextBox1,
CommandButton1,CommandButton2,
を準備しておいて、
以下のVBAを貼り付けます。
4個所ある
'DoEvents
を無効のままにすると、
画面が途中で更新されませんが、
DoEvents
と、「'」を4箇所取り除いて有効にすると、
途中で更新されているのが確認できます。
(環境に合わせて数値100000は適当に変更を)
'-----------------------------------------
Private Sub CommandButton1_Click()
Sub_A
TextBox1.Value = 1
Sub_B
TextBox1.Value = 2
Sub_C
TextBox1.Value = 3
Sub_D
TextBox1.Value = 4
End Sub
Private Sub Sub_A()
'DoEvents
CheckBox1.Value = False
CheckBox2.Value = False
CheckBox3.Value = False
Sub_Print
End Sub
Private Sub Sub_B()
'DoEvents
CheckBox1.Value = False
CheckBox2.Value = True
CheckBox3.Value = True
Sub_Print
End Sub
Private Sub Sub_C()
'DoEvents
CheckBox1.Value = True
CheckBox2.Value = False
CheckBox3.Value = True
Sub_Print
End Sub
Private Sub Sub_D()
'DoEvents
CheckBox1.Value = True
CheckBox2.Value = True
CheckBox3.Value = True
Sub_Print
End Sub
Private Sub Sub_Print()
For n = 1 To 100000 '時間つぶし 環境に合わせて数値は適当に変更を
k = 999 '画面が更新されるかどうかが確認できる
Next n
'ここに印刷のマクロを記入
End Sub
Private Sub CommandButton2_Click()
Sub_A
TextBox1.Value = ""
End Sub
'-----------------------------------------
ありがとうございました。
No.4
- 回答日時:
NO2に書いたものです。
kon3さんの質問は、
連続した印刷の際に
表示したはずのCheckBoxの変更が
印刷に反映されない。
最後のページの画面表示には
CheckBoxが変更されているので
表示そのものには問題はない。
ということですから、
kon3さんの質問の要点は、
『画面の変更を各ページに正しく反映
して印刷するにはどうしたらいいか?』
ということだと思います。
「印刷する時タイムラグが発生」
と表現してらっしゃいます。
私の場合も全く同じ疑問だと認識してるので
書かせてもらいました。
papayukaさんありがとうございます。
>プライベート変数はSub~End Sub内でしか効力を持ちません
というご指摘で、わき道にそれてしまったようで、
kon3さんごめんなさい。
あまり適切でない形で例示してしまったのですが、
実際は変数の部分は本質的な問題ではありません。
(Sub_BではOKですので、プライベート変数ではありません)
前回のものに沿った形で書き直すと、
「印刷する時タイムラグが発生」
するのは、次のような例です。
Dim m As Integer
Private Sub Sub_A()
For n = 1 To 5
'For l = 1 To 1000000 印刷の代りに時間つぶし
' p = p
'Next l
Range("A1").Value = n
m = Range("A1").Value
Sub_hyouji '表示データの更新
Sub_insatu '印刷
Next n
End Sub
Private Sub Sub_B()
m = Range("A1").Value
Sub_hyouji '表示データの更新
Sub_insatu '印刷
End Sub
Private Sub Sub_C()
Range("A1").Value = Range("A1").Value + 1
End Sub
Private Sub Sub_hyouji()
TextBox1.Value = m
End Sub
Private Sub Sub_insatu()
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub
Private Sub CommandButton1_Click()
Sub_A
End Sub
Private Sub CommandButton2_Click()
Sub_B
End Sub
Private Sub CommandButton3_Click()
Sub_C
End Sub
表示を更新すればいいのだと思うのですが・・・・。
No.3
- 回答日時:
wildcat888さん、こんにちは。
他の方の質問の回答に回答するのもなんですが、、
変数 m に代入した値は何に使われているのか、コールしている2つのプロシージャは何なのかが不明です。テキストボックスも出てこないし。。
m=range("A1").value
Sub_hyouji '表示データの更新
Sub_insatu '印刷
ひょっとして、Sub_hyoujiやSub_insatuの中でも m を使っていて、それで変わらないと言っているのだとしたら、そもそも使い方を間違えているだけだと思います。
プライベート変数はSub~End Sub内でしか効力を持ちません。
Sheet1にTextBoxがあったとして、
Sub test()
Dim n As Integer
For n = 1 To 5
Worksheets("Sheet1").Range("A1").Value = n
Call myPrintOut(n)
Next n
End Sub
Sub myPrintOut(hikisuu)
Worksheets("Sheet1").TextBox1.Value = hikisuu
Worksheets("Sheet1").PrintOut
End Sub
No.2
- 回答日時:
すみません、回答ではないのですが、
同じようなところでつまづいているので、
書かせてください。
チェックボックスではなく、
複数のテキストボックスを含む領域を
更新しながら印刷したいのですが、
ご質問と同様に、
全て同じものが印刷されてしまうのです。
何か、再表示のようなことをやればいいのだと思って、
ここで「連続 印刷」、「印刷 再表示」などで検索したのですが、
みつかりませんでした。
私の場合は概略以下のようなことです。
ボタンAを押すと、Sub_A が
実行されるようにすると、
5枚全て同じものが印刷されます。
途中、テキストボックスは更新されないようで、
最後に5枚目のデータが正しく表示されて終わっています。
セルA1に0を入れておき、
ボタンB、Cを押すと、Sub_B、Sub_C が
実行されるようにすると、
ボタンC、Bを次々に押すことによって、
期待したように、表示データが更新されて
全て正しく印刷されます。
Sub_A
for n = 1 to 5
range("A1").value = n
m=range("A1").value
Sub_hyouji '表示データの更新
Sub_insatu '印刷
next n
Eub end
Sub_B
m = range("A1").value
Sub_hyouji '表示データの更新
Sub_insatu '印刷
Eub end
Sub_C
range("A1").value = range("A1").value + 1
Eub end
再描画か再計算みたいなことを印刷の前に
実行するのかと思うのですがわかりません。
No.1
- 回答日時:
こんにちは。
印刷プレビューでは正しく表示されてますか?
問題となる部分(CheckBoxに対する処理部分)のソースを簡略化し(出来れば動く形で)提示された方が解決しやすいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
- 1 エクセルVBAでデータ検索(Win2000,Excel2000)
- 2 エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という
- 3 エクセル2000VBAからの印刷で実行時エラー1004発生
- 4 再)excel2000VBAで用紙の上半分部分のみ連続印刷する
- 5 [Excel,VBA,VBE] VBE上で構文,定型文の貼り付けを完結させたい
- 6 EXCEL 2003におけるVBA,マクロ、改ページ操作と印刷設定について
- 7 Excel2000にVB6ランタイムをインストールしたらExcelが終了できない
- 8 Excel VBA(Win2000、Office2000)
- 9 EXCEL2000 (WINDOWS2000) 数字の表示のさせ方について
- 10 Excel VBAで年齢を求める(Win2000、Office2000)
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
WORDを使って印刷部数分の連番...
-
5
ワードのテンプレートが印刷で...
-
6
EXCELで複数のシートを同時に印...
-
7
Excel 特定のシートが印刷出来ない
-
8
ワードで作ったものをペイント...
-
9
マクロで印刷→セルの値から部数...
-
10
印刷ができません
-
11
エクセルVBAで日報自動印刷
-
12
EXCELで1行の内容を1枚の紙に印...
-
13
ワード2000で薄墨印刷可能ですか。
-
14
印刷プレビューに白紙のページ...
-
15
エクセル「改ページビューで印...
-
16
エクセルの行タイトルを特定の...
-
17
Excelでヘッダーフッターの印刷...
-
18
ハローワークの「求人申込書」...
-
19
WinXPペイントでのページ範囲の...
-
20
エクセルで複数のシートの1枚目...