• 締切済み

印刷した後の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

  • 印刷後のVBAの実行 (3)

    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 Exit Sub End If End If If Worksheets("Sheet1").Range("D5") = "不要" Then GoTo P1 ActiveSheet.Range("A70:Y70").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 P1: ActiveSheet.Range("A1").Select End Sub sheet1のD5に「不要」と入っていたら 24~33行目の作業がキャンセルになりますが sheet2のD5にも「不要」と入っていたら、同じ様にキャンセルできる様に出来ますでしょうか? ご回答お願いします

  • 印刷後のVBAの実行 (2)

    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              Exit Sub     End If   End If   ActiveSheet.Range("A70:Y70").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 先日、上記のコードを回答者の方から教えてもらい、とても助かっていますが sheet1のD5に「不要」という文字が入っていた場合、 sheet3への貼り付け(23~30行目の作業)をキャンセルして、最後にsheet1のA1を選択するようにはどの様にしたらいいでしょうか?

  • 印刷後のVBAの実行(4)

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "顧客データー1" Then If Range("D1").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D1").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("顧客データー1").Range("D6") = "不可" Or _ Worksheets("顧客データー2").Range("D6") = "不可" Then GoTo P1 ActiveSheet.Range("F650:O650").Copy If Worksheets("日報").Range("F5").Value = "" Then Worksheets("日報").Range("F5").PasteSpecial Paste:=xlPasteValues Else Worksheets("日報").Range("F65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub 現在上記コードを使っていますが、ワークシート日報への値のみ貼り付けの部分で少し変更したいのですが、印刷するシートのセルM1の値が1ならそのシートのRangeF650:O650をコピーしてワークシート日報のF5に値のみで貼り付け、M1の値が2ならF6に、M1の値が3ならF7に・・・という感じでM1の数字の値によってワークシート日報へ貼り付け先を変えていくようしたいのですが、どのようにコードを変更したらいいでしょうか?

  • EXCELのVBAについて

    マクロのボタンで内容を削除する様に設定した所、 Dim re As Integer Sheets("投入シート").Select re = MsgBox("入力データをクリアします。" & vbCrLf & vbCrLf & "よろしいですか?", vbOKCancel, "クリア確認") If re <> vbCancel Then Sheets("投入シート").Select ActiveSheet.Unprotect Range("a1:c30").Select Selection.Copy Application.CutCopyMode = False Selection.Copy Sheets("work").Select Range("A1").Select ActiveSheet.Paste Sheets("投入シート").Select ActiveSheet.Unprotect Range("c4:c30").Select Selection.ClearContents Range("f31").Select Selection.Copy Range("c9").Select ActiveSheet.Paste Range("f33").Select Selection.Copy Range("c11").Select ActiveSheet.Paste Range("f32").Select Application.CutCopyMode = False Selection.Copy Range("c14").Select ActiveSheet.Paste Range("c4").Select Application.CutCopyMode = False 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End If Sheets("投入シート").Select Range("c4").Select End Sub この様に入力したのですがセルのC11の計算式だけセル番号が消えてしまいます。 どうしてでしょうか?ご指導をお願いします。

  • VBA beforeprintについて

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "sheet1" Then If Range("M1").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("M1").Select Exit Sub End If ElseIf ActiveSheet.Name = "sheet2" Then If Range("A47").Value = 文字 Then Cancel = True    MsgBox ("日付を入力してください") Range("A47").Select Exit Sub End If Exit Sub End If End Sub 上記は印刷をする前に実行されるコードですが、上記を実行して印刷をした後に自動で下記のVBAを実行したいのですが Sub データー取り込み() ActiveSheet.Range("B2000:Z2000").Copy ChDir "\\データーA\データーB\データーC\データーD" Workbooks.Open Filename:="\\データーA\データーB\データーC\データーD\データーシート1.xls" Sheets("顧客データー").Select If Worksheets("顧客データー").Range("B18").Value = "" Then Worksheets("顧客データー").Range("B18").PasteSpecial Paste:=xlPasteValues Else Worksheets("顧客データー").Range("B65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If ActiveWorkbook.Save ActiveWindow.Close End Sub 上記のコードと下記のコードをどのように絡めたらいいのかわかりません。アドバイスお願いします。

  • エクセルVBAの不思議な挙動?

    エクセル2003です。 ThisWorkbookには以下の記述があります。 Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "Sheet1" Then Exit Sub If Range("A1").Value = "" Then MsgBox "A1が未入力です" Range("A1").Select Cancel = True End If Application.OnTime Now(), "ページ移動" End Sub 標準モジュールには以下の記述があります。 Sub ページ移動() Sheets("Sheet2").Select Range("A1").Select End Sub Sub プリント() ActiveWindow.SelectedSheets.PrintPreview End Sub これでSheet1を開いた状態でツールバーから印刷プレビュー指示をすると、A1セルが入力済みであればプレビュー画面を出し、プレビューを閉じればSheet2が表示されます。 ところが、同じ状態でツールバーからではなく、マクロ Sub プリント を実行すると、プレビュー画面にはなりますが、プレビューを閉じてもSheet1のままです。 なぜ、 Application.OnTime Now(), "ページ移動" が、有効にならないのでしょうか?

  • vba 順次記録 

    下記のマクロはツール、マクロ、新しいマクロの記録で作成しました。 順序はa1に ”=RSS|'3315.T'!現在値” 最初から入力しておきます。 1回目a1に楽天のマーケットスピード  (MS) より数字が入力されます a1に入力したすうじをa5とa6にコピーします。 2回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6 を a6,a7 にコピーします。 3回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7 を a6,a7,a8 にコピーします。 4回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7,a8 を a6,a7,a8,a9 にコピーします。 n回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7,a8,-----a? を a6,a7,a8,a9,-----a? にコピーします。 以後入力有り次第 繰り返し続けて記録したいのです。 下記のマクロはa列に記録ですがb、c、d、と4箇所形式は同じですがデータの違いのが有るのですが a,b,c,d,列入力順序がばらばらなのです a列のみでもお願いします。 Sub M3() Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Range("A5:A6").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A6").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A7").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A8").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A9").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A10").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select End Sub

  • Excel2003 VBAで印刷 セル指定

    よろしくお願いします。 ボタン5をクリックしてある範囲を印刷したいのですが、私が知っているものはセル指定でActiveSheet.PageSetup.PrintArea = Range("A90:K130") であれが印刷可能なのですが最後の行までにしたいのですがどうしてもうまくいきません。 ActiveSheet.PageSetup.PrintArea = Range(Cells(90, 1), Cells(r, 11)) それと同時に11列全部(文字は小さくてもいいのですが)一枚に印刷したのですが よろしくお願いします。 Private Sub CommandButton5_Click() res = MsgBox("決済記録を印刷します", vbYesNo + vbQuestion) If res = vbYes Then r = Range("A65536").End(xlUp).Row + 1 'Range(Cells(90,1),Cells(r,11)) '印刷したい範囲 ActiveSheet.PageSetup.PrintArea = Range("A90:K130") ActiveSheet.PrintOut preview:=True End If End Sub

  • excel2000VBAで用紙の上半分部分のみ連続印刷する

    excel2000VBAでマクロを作成しています。 10人について数項目については同じですが、人によって請求項目が違い、請求項目がない人については、非表示にしたいです。 また前回の請求を参考に見ながら書き換え必要部分のみ入力作成します。 請求書の印刷は、A4用紙5枚を使います。 各シートの、上半分(1/2)の部分が請求書になっていますので各シートの上半分部分を1枚目から10枚目まで連続で印刷します。 下記のコードは、シート2枚印刷すると、その横の列に 順に印刷するようにマクロ作成しました。つまり縦に2枚横5枚づつ計10枚印刷できます。 これでなんら印刷の不具合は生じません。 しかしながら、見るからに幼稚なコードで情けないです。これをマクロらしく、もしくは新しい別の方法をご教示ねがいたいのです。よろしくお願いします。 Sub 請求書一括印刷() Application.ScreenUpdating = False Sheets("A").Select Range("B2:AB32").Select Selection.Copy Sheets("請求印刷 (2)").Select Range("B1").Select ActiveSheet.Paste Sheets("A").Select Application.CutCopyMode = False Range("B2").Select Sheets("B").Select Range("B2:AB32").Select Selection.Copy Sheets("請求印刷 (2)").Select Range("B34").Select ActiveSheet.Paste Sheets("B").Select Application.CutCopyMode = False Range("B2").Select Sheets("C").Select Range("B2:AB32").Select Selection.Copy Sheets("請求印刷 (2)").Select Range("AD1").Select ActiveSheet.Paste Sheets("C").Select Application.CutCopyMode = False Range("B2").Select   以下つづく Sheets("hyousi").Select End Sub

  • EXEL VBAで印刷の指定をしたいのですが

    VBA初心者、勉強中です。 sheet1に2つの表がありまして下記のとおりボタンをクリックしたらインプットボックスが立ち上がって2つの表の1か2を指定したら範囲がぷれびゅーするということなんですが、1を入れても、2を入れてもMsgBox "1か2を入力して!しか表示しません。 さんざん調べまくりましたが、どなたかご教授お願いします。 Sub 印刷() Dim SentP As Integer On Error Resume Next SentS = InputBox("どちらを印刷?1売上 2材料") If SentP = 1 Then Range("a1:g32").Select Selection.printpreiew ElseIf SentP = 2 Then Range("j1:n41").Select Selection.PrintPreview Else MsgBox "1か2を入力して!" End If End Sub

専門家に質問してみよう