2016-09-16 120 views
1

我一直在研究打印宏,我认为这可能很简单。我试着录制一个宏,并且一直在研究几个小时来看其他人的代码。我想是的宏:VBA打印宏以特定方式设置页面

1)在活动工作表中的所有单元格

2)设置打印比例,以适应所有列到一个页面

3)打印横向模式

4)打开打印预览(如果可能)

5)如果#4不可行,则执行打印作业。

当我运行我的当前代码时,我的excel工作表被分成了大量的页面(棋盘格样式),然后我得到一个错误代码。谢谢阅读。

这是我当前的代码:

Sub PrintNOPAsheet()' 
' PrintNOPAsheet Macro 



Cells.Select 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .PrintTitleRows = "" 
    .PrintTitleColumns = "" 
End With 
Application.PrintCommunication = True 
ActiveSheet.PageSetup.PrintArea = "$A$1:$H$346" 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .LeftHeader = "" 
    .CenterHeader = "" 
    .RightHeader = "" 
    .LeftFooter = "" 
    .CenterFooter = "" 
    .RightFooter = "" 
    .LeftMargin = Application.InchesToPoints(0.25) 
    .RightMargin = Application.InchesToPoints(0.25) 
    .TopMargin = Application.InchesToPoints(0.75) 
    .BottomMargin = Application.InchesToPoints(0.75) 
    .HeaderMargin = Application.InchesToPoints(0.3) 
    .FooterMargin = Application.InchesToPoints(0.3) 
    .PrintHeadings = False 
    .PrintGridlines = False 
    .PrintComments = xlPrintNoComments 
    .PrintQuality = 600 
    .CenterHorizontally = False 
    .CenterVertically = False 
    .Orientation = xlLandscape 
    .Draft = False 
    .PaperSize = xlPaperLetter 
    .FirstPageNumber = xlAutomatic 
    .Order = xlDownThenOver 
    .BlackAndWhite = False 
    .Zoom = 100 
    .PrintErrors = xlPrintErrorsDisplayed 
    .OddAndEvenPagesHeaderFooter = False 
    .DifferentFirstPageHeaderFooter = False 
    .ScaleWithDocHeaderFooter = True 
    .AlignMarginsHeaderFooter = True 
    .EvenPage.LeftHeader.Text = "" 
    .EvenPage.CenterHeader.Text = "" 
    .EvenPage.RightHeader.Text = "" 
    .EvenPage.LeftFooter.Text = "" 
    .EvenPage.CenterFooter.Text = "" 
    .EvenPage.RightFooter.Text = "" 
    .FirstPage.LeftHeader.Text = "" 
    .FirstPage.CenterHeader.Text = "" 
    .FirstPage.RightHeader.Text = "" 
    .FirstPage.LeftFooter.Text = "" 
    .FirstPage.CenterFooter.Text = "" 
    .FirstPage.RightFooter.Text = "" 
End With 
Application.PrintCommunication = True 

Selection.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False 
End Sub 

'

回答

1

这里就是我通常使用,然后我把它以符合您的问题。在With内,您可以添加记录宏中的许多属性以适合您的代码。

Sub printIt() 

Dim ws As Worksheet: Set ws = Worksheets("Sheet1") 
Dim rng as Range 
Dim printRange as String 

Set rng = ws.Range("A1:J11") 

''''For Dynamic Ranges''''' 
With ws 
    Set rng = .Range(.Range("A1"),.Range("J11").End(xlDown)) 
End With 

''''Range from User Highlighted Cells'''' 
Set rng = Selection 
''''This method is not the best way'''' 

printRange = ws.Name & "!" & rng.Address 

With ws.PageSetup 
    .PrintArea = printRange 
    .Zoom = False 
    .FitToPagesWide = 1 'Question 2 
    .Orientation = xlLandscape 'Question 3 
End With 

ws.PrintOut preview:=True 'Question 4 

End Sub 
+0

哎呀我把那部分拿出来了。我也希望它打印选定的单元格。 – Rami

+0

我也想说谢谢!你写的代码完美,除了我仍然需要打印选定的单元格外。 – Rami

+0

在代码中添加以解决您的问题。希望这可以帮助! – calallen63