我可以使用VBA设置工作表以适合一页并用完整个页面

问题描述

我有一个应用程序可以创建要打印的报告(工作表)。

Excel可以根据生成报告的用户来确定不同的页面打印区域。

我试图用

解决
reportSheet.PageSetup.printArea = "A1:" & PageCorner
reportSheet.PageSetup.Zoom = False
reportSheet.PageSetup.FitToPagesTall = 1
reportSheet.PageSetup.FitToPagesWide = 1

我现在面临的问题是,我现在在打印预览页面的右侧得到了页边空白。经过测试(增加每行的行高)后,我确定这是由于Excel按比例缩小高度和宽度直到它们全部适合一页所致。

是否有一种方法可以使Excel不按比例缩小报表,而是独立缩小或拉伸宽度和高度,以便使用整个页面(可疑)?

如果没有,我计划创建一个脚本来选择要完成此操作的列的宽度,我想知道是否有人以前解决过此问题,并且可以通过解释您如何完成此操作来帮助我?

原因:报告中的图像在打印时需要一直到达页面右侧的末尾。当前出现白色边距。

解决方法

据我所知,在这种情况下,在应用适合页面高度的情况下,没有简单的方法告诉Excel扩展或缩小列以适合页面的宽度。

对于VBA解决方案,如果您希望拉伸/缩小与列宽成比例,则可以使用如下所示的方法:

reportSheet.PageSetup.PrintArea = "A1:" & PageCorner
reportSheet.PageSetup.Zoom = False
reportSheet.PageSetup.FitToPagesTall = 1
reportSheet.PageSetup.FitToPagesWide = 1

Dim pa As Range
Set pa = reportSheet.Range("Print_Area")


Dim HeightToWidth As Double

Select Case reportSheet.PageSetup.PaperSize

    Case Is = xlPaperLetter: HeightToWidth = 8.5 / 11
    Case Is = xlPaperLegal:  HeightToWidth = 8.5 / 14
    Case Is = xlPaperA4:     HeightToWidth = 210 / 297

End Select

Dim MultFactor As Double
MultFactor = pa.Height * HeightToWidth / pa.Width

Dim col As Range
For Each col In pa.Columns
    col.ColumnWidth = col.ColumnWidth * MultFactor
Next

编辑:

经过更多测试之后,即使将所有页边距都设置为零,Excel似乎也没有真正使用整个页面,因此存在一些差异,我需要对此进行调整。我注意到,使用字母格式时,如果将MultFactor乘以0.9,然后再将其应用于列,则可获得最佳结果(但这可能与您有所不同)。

col.ColumnWidth = col.ColumnWidth * MultFactor * 0.9