2017-04-06 67 views
0

我创建了一个VBA宏,可将工作簿的特定工作表导出为PDF。够简单。我遇到的问题是我的代码只选择了Sheet4的一部分,所以在我的PDF部分表中缺失。选择整个表格进行打印:Excel VBA

Sheet4包含范围为A1:W80的数据。但是,在下面运行代码时,只选择范围A1:W75进行打印。我已确认我的PrintArea包含整个页面。打印时,一切看起来都很棒。

我一直在寻找解决方案,没有成功。这可能是一个页面布局设置问题?如何确保在导出为PDF格式时选择整张表格而不是仅选择其中的一部分?

这里是我的代码:

Sub SaveReportPDF() 

    Dim filepath As String 

    filepath = "ABC" 

    ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Select 
    Selection.ExportAsFixedFormat _ 
     Type:=xlTypePDF, _ 
     Filename:=filepath, _ 
     Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, _ 
     IgnorePrintAreas:=False, _ 
     OpenAfterPublish:=False 

End Sub 
+1

'表(阵列( “工作表Sheet1”, “Sheet2中”, “表Sheet 3”, “Sheet4”))Select'不作'Selection'整个工作表 - 它只是选择4张纸,并使每张纸上的“选择”与Sheet1上的相同。 – YowE3K

回答

3

作为很好的做法,你可以设置你所使用的每个表的打印区域的范围,并调整到页面,使用以下子:

Sub ScaleForPrinting() 
    Dim sh As Worksheet 
    ' Stop PrintCommunication for speed 
    Application.PrintCommunication = False 
    ' Cycle through each sheet 
    For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")) 
     ' Set print area to used range of sheet 
     sh.PageSetup.PrintArea = sh.UsedRange 
     ' Remove zoom, scale sheet to fit 1 page 
     With sh.PageSetup 
      .CenterHorizontally = True 
      .CenterVertically = True 
      .Zoom = False 
      .FitToPagesWide = 1 
      .FitToPagesTall = 1 
     End With 
    Next sh 
    ' Enable PrintCommunication to apply settings 
    Application.PrintCommunication = True 
End Sub 

然后,您将希望在选择对象后使用ActiveSheet对象,而不是Selection对象。这可能与直觉相反,但是您不想在中选择,而是要打印。 。

所以:

ScaleForPrinting 
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Select 
ActiveSheet.ExportAsFixedFormat _ 
    Type:=xlTypePDF, _ 
    Filename:=filepath, _ 
    Quality:=xlQualityStandard, _ 
    IncludeDocProperties:=True, _ 
    IgnorePrintAreas:=False, _ 
    OpenAfterPublish:=False 
' Deselect sheets to avoid nasty multiple sheet accidental editing! 
ThisWorkbook.Sheets("Sheet1").Select