首页 > 解决方案 > 使用 VBA 可以设置工作表以适应一页并用完整个页面

问题描述

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

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

我试图解决这个问题

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

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

有没有办法让 Excel 不按比例缩小报告,而是独立缩小或拉伸宽度和高度,以便使用整个页面(值得怀疑)?

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

原因:报表有一个图像,打印时需要一直到页面右侧的末尾。目前出现了一个白边。

标签: excelvbaprinting

解决方案


据我所知,在这种情况下应用适合页面高度后,没有简单的方法可以告诉 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

推荐阅读