2017-09-14 31 views
2

[下に更新]VBAマクロ印刷ループ

私は生産用シートの印刷マクロを作成しようとしています。

実際のプリントアウトを除いてすべてが素晴らしいです。 .Zoom = 50の代わりに.Zoom = Falseを使用すると、プリントアウトはプリントアウトシート上で非常に小さくなります。私がズーム= 50を使用する場合、これらの幅の広い余白を左右に取得します。私はそれが何らかの形で実際のprintarea行を処理しないと思うが、他のコマンドラインはうまく動作するように見えるので、何の手がかりもない。私はかなりのprintarea、fitTopagesxxにコードをストリップしようとしましたが、同じ問題がありました。

コードを複数回書き直してみましたが、エラープロンプトが表示されたり、Web上の他のコードと同じ結果が表示されたりしました。

Sub PrintJob() 
     Dim ws As Worksheet 
     Dim i As Long 

    Set ws = Sheets("Filtered_List") 

     For i = 2 To ws.Cells(Rows.Count, "F").End(xlUp).Row 
     If ws.Cells(i, "F").Value = 0 Then Exit For 
      With Sheets("Print_Page") 
       .Range("C8").Value = ws.Cells(i, "F").Value 
       Worksheets("Print_Page").PageSetup.PrintArea = "$C$2:$L$60" 
       Worksheets("Print_Page").PageSetup.Orientation = xlPortrait 
       Worksheets("Print_Page").PageSetup.Zoom = 50 
       Worksheets("Print_Page").PageSetup.FitToPagesWide = 1 
       Worksheets("Print_Page").PageSetup.FitToPagesTall = False 
       Worksheets("Print_Page").PageSetup.LeftMargin = Application.InchesToPoints(0) 
       Worksheets("Print_Page").PageSetup.RightMargin = Application.InchesToPoints(0) 
       Worksheets("Print_Page").PageSetup.TopMargin = Application.InchesToPoints(0) 
       Worksheets("Print_Page").PageSetup.BottomMargin = Application.InchesToPoints(0) 
       Worksheets("Print_Page").PageSetup.HeaderMargin = Application.InchesToPoints(0) 
       Worksheets("Print_Page").PageSetup.FooterMargin = Application.InchesToPoints(0) 
       .PrintOut 
      End With 
    Next i 
End Sub 

[更新:]私はここでいくつかの助けの後で、シート固有のエラーであることを知った後、問題を理解しました。基本的には、印刷タイトルのフィールドが空である必要があり、それを行うことのコードは、このいずれかになります。

Sub PrintJob() 
    Dim ws As Worksheet 
    Dim i As Long 

    Set ws = Sheets("Filtered_List") 

     For i = 2 To ws.Cells(Rows.Count, "F").End(xlUp).Row 
     If ws.Cells(i, "F").Value = 0 Then Exit For 
      With Worksheets("Print_Page") 
      .Range("C8").Value = ws.Cells(i, "F").Value 
       With .PageSetup 
       .PrintArea = "$C$2:$L$60" 
       .Orientation = xlPortrait 
       .Zoom = False 
       .FitToPagesWide = 1 
       .FitToPagesTall = False 
       .LeftMargin = Application.InchesToPoints(0) 
       .RightMargin = Application.InchesToPoints(0) 
       .TopMargin = Application.InchesToPoints(0) 
       .BottomMargin = Application.InchesToPoints(0) 
       .HeaderMargin = Application.InchesToPoints(0) 
       .FooterMargin = Application.InchesToPoints(0) 
       .PrintTitleRows = "" 
       .PrintTitleColumns = "" 
       .LeftHeader = "" 
       .CenterHeader = "" 
       .RightHeader = "" 
       .LeftFooter = "" 
       .CenterFooter = "" 
       .RightFooter = "" 
       .LeftMargin = Application.InchesToPoints(0) 
       .RightMargin = Application.InchesToPoints(0) 
       .TopMargin = Application.InchesToPoints(0) 
       .BottomMargin = Application.InchesToPoints(0) 
       .HeaderMargin = Application.InchesToPoints(0) 
       .FooterMargin = Application.InchesToPoints(0) 
       .PrintHeadings = False 
       .CenterHorizontally = True 
       .CenterVertically = False 
       .PaperSize = xlPaperLetter 

       End With 
       .PrintPreview 
     End With 
    Next i 
End Sub 

希望:

.PrintTitleRows = "" 
.PrintTitleColumns = "" 

は、私はもっとNoldor130884から使用クリーンアップコードを数行を追加しましたそれは誰かに頭痛のビットを保存します。

+0

私は奇妙なそこの何が、例えば起こっていないことを確認するために、[ページ設定]ダイアログボックスの[値を通じてチェックしますヘッダーとフッターで – Joffan

+0

uiを使ってexcelやマクロ/ vba領域から直接何かを印刷しても、それは完璧に見えます。かなりイライラする。 – FatTwin

+0

確かに非常に奇妙です。私はIgnorePrintAreas:= Falseを追加すると助けになるとは思わない?...また、PageSetup値を設定するためにWithオブジェクトを使用しないで、おそらく同じ方法で.PrintOutを試してみます。すなわち、Worksheets( "Print_Page")を持っています。PrintOut – Joffan

答えて

2

まず第一に、私はあなたのコードビットを訂正してみましょう:

With Worksheets("Print_Page") 
    .Range("C8").Value = ws.Cells(i, "F").Value 
    With .PageSetup 
     .PrintArea = "$C$2:$L$60" 
     .Orientation = xlPortrait 
     .Zoom = 50 
     .FitToPagesWide = 1 
     .FitToPagesTall = False 
     .LeftMargin = Application.InchesToPoints(0) 
     .RightMargin = Application.InchesToPoints(0) 
     .TopMargin = Application.InchesToPoints(0) 
     .BottomMargin = Application.InchesToPoints(0) 
     .HeaderMargin = Application.InchesToPoints(0) 
     .FooterMargin = Application.InchesToPoints(0) 
    End With 
    .PrintOut 
End With 

as Microsoft saysZoom = False「FitToPagesWideとFitToPagesTallプロパティは、ワークシートがスケーリングされる方法を制御する」ことを意味することを何卒ご了承下さい

コードでは、これら2つのプロパティの前に、上書きするためにZoomを使用しています。

私はあなたが何をしたいのかを正しく理解する場合は、ちょうどあなたのコードから削除してください:

.FitToPagesWide = 1 
.FitToPagesTall = False 
+0

私はズーム部分に精通していたが、どちらの設定も機能していなかった。私はオリジナルの投稿を編集して、必要な変更を反映させました。私は、あなたのきれいなコードを使用しました。 – FatTwin