VBA打印页面设置使内容太小

周一早上好,大家好! 我有一个macros,使我能够打印出活动工作表上的内容。 下面是我在VBA中编写的页面设置。

Sub Macro() Application.ScreenUpdating = True Worksheets("Reports").Columns("F").Hidden = True Worksheets("Reports").Columns("R").Hidden = True Worksheets("Reports").Range("H:J,M:P").EntireColumn.Hidden = True Dim PrintThis As Range Dim LastRow As Long LastRow = Range("G" & Sheets("Reports").Rows.Count).End(xlUp).Row Set PrintThis = Sheets("Reports").Range("F1" & ":T" & LastRow) With Sheets("Reports").PageSetup .Orientation = xlLandscape .PrintTitleRows = "$1:$1" .PrintArea = "$F:$T" .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False .CenterHeader = "Report" .CenterFooter = Format(Now(), "dd/mm/yy") .RightFooter = "&P" End With PrintThis.PrintPreview Worksheets("Reports").Columns("F").Hidden = False Worksheets("Reports").Columns("R").Hidden = False Worksheets("Reports").Range("H:J,M:P").EntireColumn.Hidden = False Application.ScreenUpdating = False End Sub 

但是,代码似乎缩小了真正的小内容,将内容放入横向页面宽度的一半。 我没有设置FitToPageTall,因为内容的长度可能会根据工作表中的其他执行而改变。 我不知道是不是因为我用了第一行作为打印标题,并且在这个过程中隐藏了几列,因为它们在报表中是不需要的,但是它们的宽度仍然占用了页面上的空间。 请帮我弄清楚。

根据我之前的所有评论,代码应该如下所示:

 Sub Macro() Application.ScreenUpdating = True Worksheets("Reports").Columns("F").Hidden = True Worksheets("Reports").Columns("R").Hidden = True Worksheets("Reports").Range("H:J,M:P").EntireColumn.Hidden = True Dim PrintThis As Range Dim LastRow As Long LastRow = Range("G" & Sheets("Reports").Rows.Count).End(xlUp).Row Set PrintThis = Sheets("Reports").Range("F1" & ":T" & LastRow) With Sheets("Reports").PageSetup .Orientation = xlLandscape .PrintTitleRows = "$1:$1" .PrintTitleColumns = "" .PrintArea = "$F:$T" .FitToPagesWide = 1 .FitToPagesTall = False .Zoom = False .CenterHeader = "Report" .CenterFooter = Format(Now(), "dd/mm/yy") .RightFooter = "&P" End With PrintThis.PrintPreview Worksheets("Reports").Columns("F").Hidden = False Worksheets("Reports").Columns("R").Hidden = False Worksheets("Reports").Range("H:J,M:P").EntireColumn.Hidden = False Application.ScreenUpdating = False End Sub 

这是在2010年为我testing和工作。

在VBA中将打印区域设置为范围名称并打印它通常是一个好主意。 如果工作表更改,则相应地更改打印区域。 因此,这个想法是正确设置[input_print_area]。 通常我使用这样的东西:

 Public Sub PrintPage() Dim Sh As Worksheet Dim rngPrint As Range On Error GoTo PrintPage_Error s_reduce_paper_title = "Go Green!" ActiveSheet.PageSetup.BlackAndWhite = Not tbl_Input.cb_print_color Set Sh = ActiveSheet Set rngPrint = [input_print_area] With Sh.PageSetup .Orientation = xlPortrait .Zoom = False .FitToPagesTall = 1 .FitToPagesWide = 1 End With Select Case MsgBox("Are you sure that you want to print?", vbYesNo Or vbQuestion Or vbDefaultButton1, s_reduce_paper_title) Case vbYes Select Case MsgBox("Really sure that you want to print?", vbYesNo Or vbQuestion Or vbDefaultButton1, s_reduce_paper_title) Case vbYes rngPrint.PrintOut End Select End Select On Error GoTo 0 Exit Sub PrintPage_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure PrintPage of Modul mod_Drucken" End Sub