2017-11-27 7 views
0

ユーザーが記入したフォームでコマンドボタンをクリックすると、次のコードが実行されます。フォームには5つのページがありますが、10のうち9回は1番目と5番目のページだけが情報を持っています。ページ2-4は追加項目ですが、データがない場合は印刷したくありません。現在、コードを使用して印刷すると、5ページすべてが印刷されます。ExcelでVBAを使用して値を持ち、空白のページを印刷する

私は、適切な印刷領域を印刷するためのコードのヘルプを探しています。私は、コードの最終行が問題であるかどうか、または印刷領域が計算される方法であるかどうかはわかりません。セットアップの範囲で範囲変数を設定する必要がありますか、または印刷コマンドの範囲全体を使用して印刷領域を印刷できますか?

ご協力いただきありがとうございます。ここに私が走ろうとしているサブがある。

Private Sub PrintEstimate1_Click() 
' Prints the estimate upon clicking once 
    Dim ws As Worksheet 
Set ws = ActiveSheet 

Dim page1 As Range 
Dim page2 As Range 
Dim page3 As Range 
Dim page4 As Range 
Dim page5 As Range 

Set page1 = ws.Range("A2:I58") 
Set page2 = ws.Range("A59:I116") 
Set page3 = ws.Range("A117:I174") 
Set page4 = ws.Range("A175:I232") 
Set page5 = ws.Range("A233:I289") 

Dim setup As PageSetup 
Set setup = ws.PageSetup 

If ws.Range("A63").Value = vbNullString Then 
    setup.PrintArea = Union(page1, page5).Address 
ElseIf ws.Range("A121").Value = vbNullString Then 
    setup.PrintArea = Union(page1, page2, page5).Address 
ElseIf ws.Range("A179").Value = vbNullString Then 
    setup.PrintArea = Union(page1, page2, page3, page5).Address 
Else 
    setup.PrintArea = Union(page1, page2, page3, page4, page5).Address 
End If 

msg = "Would you like to send to default printer?" 
msg = msg & vbNewLine 
config = vbYesNoCancel + vbQuestion + vbDefaultButton1 
Title = "Printer Selection" 
ans = MsgBox(msg, config, Title) 

' Dialog Box to decide whether to quick print or make changes to printer setup. 
If ans = vbYes Then Worksheets("PE Form").Range("A1:I288").PrintOut Copies:=1, Collate:=True 
'I am not sure if it is this line above that is giving me the problem or not. 
If ans = vbNo Then Application.Dialogs(xlDialogPrint).Show 
If ans = vbCancel Then 
End If 

End Sub 
+0

A63、A121、A179は実際には空ですか?私はすべての5ページが印刷される場合、それらのテストが失敗していると仮定しています。それらのセルには1つのスペースが含まれていますか?あなたがステップスルーした場合、 'ElseIf'命令の' If'を実行するか、 'Else'だけを実行しますか? – MoondogsMaDawg

+0

はい、セルが空であることを確認しました。私はそれを踏んだとき、最初のIFをA63が空白であると捉え、Page1とPage5に印刷領域を設定しましたが、印刷すると5ページすべてが印刷されました。 – Decoy26

+1

'もしans = vbYes then Worksheets(" PE Form ")。Range(" A1:I288 ")。PrintOut'ここで範囲をハードコードしました。私はあなたの印刷領域の設定をオーバーライドすると思います。 if ans = vbYes Then Workheets( "PE Form")。PrintOut'(未テスト)。 – MoondogsMaDawg

答えて

0

MoondogsMaDawgとページ区切りについての調査のおかげで、意図したとおりに機能していると思われる次の改訂コードがあります。

Private Sub PrintEstimate1_Click() 
' Prints the estimate upon clicking once 
    Dim ws As Worksheet 
Set ws = ActiveSheet 
ws.ResetAllPageBreaks 
ws.PageSetup.PrintArea = "" 

Dim setup As PageSetup 
Set setup = ws.PageSetup 

Dim page1 As Range 
Dim page2 As Range 
Dim page3 As Range 
Dim page4 As Range 
Dim page5 As Range 

Set page1 = ws.Range("A1:I58") 
Set page2 = ws.Range("A59:I116") 
Set page3 = ws.Range("A117:I174") 
Set page4 = ws.Range("A175:I232") 
Set page5 = ws.Range("A233:I289") 

ws.Rows(59).EntireRow.PageBreak = xlPageBreakManual 
ws.Rows(117).EntireRow.PageBreak = xlPageBreakManual 
ws.Rows(175).EntireRow.PageBreak = xlPageBreakManual 
ws.Rows(233).EntireRow.PageBreak = xlPageBreakManual 
ws.Columns("J").EntireColumn.PageBreak = xlPageBreakManual 

If ws.Range("A63").Value = vbNullString Then 
    setup.PrintArea = Union(page1, page5).Address 
ElseIf ws.Range("A121").Value = vbNullString Then 
    setup.PrintArea = Union(page1, page2, page5).Address 
ElseIf ws.Range("A179").Value = vbNullString Then 
    setup.PrintArea = Union(page1, page2, page3, page5).Address 
Else 
    setup.PrintArea = Union(page1, page2, page3, page4, page5).Address 
End If 

msg = "Would you like to send to default printer?" 
msg = msg & vbNewLine 
config = vbYesNoCancel + vbQuestion + vbDefaultButton1 
Title = "Printer Selection" 
ans = MsgBox(msg, config, Title) 

' Dialog Box to decide whether to quick print or make changes to printer setup. 
If ans = vbYes Then Worksheets("PE Form").PrintOut Copies:=1, Collate:=True 
If ans = vbNo Then Application.Dialogs(xlDialogPrint).Show 
If ans = vbCancel Then 
End If 

End Sub 
関連する問題