Excel VBA打印自动调整问题

我有一个优秀的VBA打印function,我要打印在我的工作簿中的每个表被调用一次

我在VBA中循环调用这个函数。

Sub PrintSheet With ActiveSheet 'lastRow is worked out here.... 'Autofit YTD and SLY .Columns("J:J").AutoFit .Columns("K:K").AutoFit 'Autofit email column .Columns("F:F").AutoFit With .PageSetup .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False .Orientation = xlLandscape .LeftMargin = Application.InchesToPoints(0.4) .RightMargin = Application.InchesToPoints(1) .TopMargin = Application.InchesToPoints(0.5) .BottomMargin = Application.InchesToPoints(0.5) .RightFooter = "&P of &N" .PrintArea = "$A$1:$O$" & CStr(lastRow) End With .PrintOut End With End Sub 

我遇到的问题是,有时(随机的行为,并不总是相同的表格)我自动安装的列伸展真的很宽迫其他列离开页面。 这不是数据相关的,因为你可以再次运行打印程序,并打印出相同的纸张,这是以前将柱子拉伸的好。 我正在修剪表单中的所有列值,因为他们首先inputVBA代码

除此之外,我还没有find任何有这种行为的模式,正如我所说的那样,拉伸的那些列是自动生成的。

有什么想法吗?

在使用autofit时,我经历过很多次这样的事情; 所以我现在尝试尽可能less地使用它。

你可以做的事情:

1.使用一个设定的宽度,例如如果你知道J列在47宽度时总是OK,那么使用Columns("D:D").ColumnWidth = 47
2.你可以在子程序的最后添加一些testing,如下所示:

 Sub PrintSheet() With Excel.ActiveSheet 'lastRow is worked out here.... lastRow = .Cells(.Rows.Count, 1).End(Excel.xlUp).Row 'Autofit YTD / SLY / email .Columns("J:J").AutoFit .Columns("K:K").AutoFit .Columns("F:F").AutoFit With .PageSetup .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False .Orientation = Excel.xlLandscape .LeftMargin = Application.InchesToPoints(0.4) .RightMargin = Application.InchesToPoints(1) .TopMargin = Application.InchesToPoints(0.5) .BottomMargin = Application.InchesToPoints(0.5) .RightFooter = "&P of &N" .PrintArea = "$A$1:$O$" & lastRow 'CStr(lastRow) <=== & does an implicit conversion End With 'add three checks here <==== '<==I've picked 100 out of thin air but you need to change this to a value which indicates that it has behaved badly If .Columns("J:J").ColumnWidth > 100 Then .Columns("J:J").ColumnWidth = 30 '<== you might want to amend 30 End If If .Columns("k:k").ColumnWidth > 100 Then .Columns("k:k").ColumnWidth = 30 End If If .Columns("f:f").ColumnWidth > 100 Then .Columns("f:f").ColumnWidth = 30 End If .PrintOut End With End Sub