• 締切済み

印刷した後のVBAの実行

Private Sub Workbook_BeforePrint(Cancel As Boolean) If (ActiveSheet.Name = "sheet1") And ((Range("D6").Value = "")) Then Cancel = True MsgBox ("名前を入力してください") Range("D6").Select ElseIf (ActiveSheet.Name = "sheet2") And ((Range("C11").Value = "")) Then Cancel = True MsgBox ("受付時間を入力してください") Range("C11").Select End If End Sub 今上記のコードで印刷制御をしていますが これに追加をしたいのですが 例えば上記の条件を満たしてsheet1を印刷した後 sheet1のA70:Y70の範囲(この部分には関数が入ってます)をCopyして sheet3のA1:Y1に値のみで貼り付けて 最後にsheet1のA1を選択して終了 次に同じ様に 条件を満たしてsheet2を印刷した後 sheet2のA70:Y70の範囲(この部分にも関数が入ってます)をCopyして 今度はsheet3のA2:Y2に 値のみで貼り付ける (→ここが重要なんですが、この部分はもしsheet3のA1に情報が入力されてたら、sheet3のA2:Y2に貼り付ける、 A1が空白ならsheet3のA1:Y1に貼り付けるという風に、貼り付ける初めの部分をA1:Y1として、情報が入力されていたらその下の行の情報の入力されてない範囲に貼り付ける・・・という形にしたいのですが) そしてsheet2のA70:Y70の範囲をdeleteして 最後にsheet2のA1を選択して終了 印刷ボタンを押してsheetを印刷した後、この部分を自動で実行するようにVBAで追加を組めるでしょうか? 素人なのでよく分かってないんですが、回答お願いします

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です >sheet3は普通に印刷出来る様にしたいのですが・・・・・ 1行をコメントにするだけなのですが、おわかりになりませんでしたか? #01のマクロの18行目にある   Cancel = True を削除するか、コメントにしてください

masa1717
質問者

お礼

出来ました ご回答有難うございました

すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。マクロ中の  ActiveSheet.Range("A2:Y2").Copy は  ActiveSheet.Range("A70:Y70").Copy の誤りでした。訂正します

masa1717
質問者

補足

sheet3は普通に印刷出来る様にしたいのですが・・・・・

すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

なんだかよく分かりません。(期待されている仕様も、masa1717さんのスキルも) とりあえずSheet1かSheet2を印刷するとき、シートのA70:Y70をSheet3の最下行に値で貼り付けるマクロにしてみました。なおSheet1、Sheet2以外はプリントしないようにしています。 Private Sub Workbook_BeforePrint(Cancel As Boolean)   If ActiveSheet.Name = "Sheet1" Then     If Range("D6").Value = "" Then       Cancel = True       MsgBox ("名前を入力してください")       Range("D6").Select       Exit Sub     End If   Else     If ActiveSheet.Name = "Sheet2" Then       If Range("C11").Value = "" Then         Cancel = True         MsgBox ("受付時間を入力してください")         Range("C11").Select         Exit Sub       End If     Else       Cancel = True       Exit Sub     End If   End If   ActiveSheet.Range("A2:Y2").Copy   If Worksheets("Sheet3").Range("A1").Value = "" Then     Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues   Else     Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _       Paste:=xlPasteValues   End If   Application.CutCopyMode = False   ActiveSheet.Range("A1").Select End Sub おそらくmasa1717さんが悩まれたのは、ペーストのためにシートを切り替えると、期待したシートが印刷されなくなることではないかと推察します。これは上記マクロのように「シートを切り替えず(Selectしないで)ペーストする」ことで回避できます >そしてsheet2のA70:Y70の範囲をdeleteして 「そして」がどの処理の後ろになるのか分からないのでマクロには入れてません。後はご自身で工夫してみてください(そこまではお手伝いしません) なお以下の行をマクロ中に挿入することにより、セルの値をクリアできます(上記を実行してもセルの式は残ります)   Worksheets("Sheet2").Range("A70:Y70").ClearContets

masa1717
質問者

補足

取り合えず試したら、できたんですがsheet3は印刷ができませんでした sheet3は印刷出来るようにしたいのですが

すると、全ての回答が全文表示されます。

関連するQ&A