|
本帖最后由 xlj310 于 2025-1-8 11:31 编辑
我是有一个思路可供参考。 就是把行高按大于1的倍数加大,直到页数增加一页,然后,再把行高×一个小于1的数,就可以使内容刚好就是一页。
代码仅供参考,页数你先预览一下,再自定义。可能页数少的情况下,作用会大一些,你如果有几百上千页的话,自己酌情考虑。
- Sub 设置多少页()
- 打印设置N页 ActiveWorkbook.ActiveSheet, 1, 1
- End Sub
- Private Sub 打印设置N页(Optional 工作表, Optional 行页数 = 1, Optional 列页数 = 1)
- If 工作表 Is Nothing Then Set 工作表 = ActiveWorkbook.ActiveSheet '赋值默认为 激活工作簿中的活动工作表
- 工作表.Activate '激活此工作表,此步必须,因为底下设置打印与活动工作表相关的。
- If 设置打印机("黑白") Then
- Application.PrintCommunication = False '断开打印机连接,这样设置快些
- With 工作表.PageSetup
- .PrintArea = "" '取消打印区域
- .CenterHorizontally = True '水平居中
- .CenterVertically = False '垂直居中
- .LeftMargin = 0 '左边距
- .RightMargin = 0 '右边距
- .TopMargin = 0 '顶边距
- .BottomMargin = 0 '底边距
- .HeaderMargin = 0 '页眉边距
- .FooterMargin = 0 '页脚边距
- .PaperSize = xlPaperA4 'A4纸
- .PrintTitleRows = "$1:$1"
- '.Orientation = xlPortrait '纵向 '横向:xlLandscape 纵向:xlPortrait
- .Zoom = 100 '缩放100%
- .Parent.UsedRange.EntireRow.AutoFit '最合适的行高
- .Parent.UsedRange.EntireColumn.AutoFit '最合适的列宽
- '.FitToPagesTall = 1 '所有行打印在一页,为0不管
- '.FitToPagesWide = 1 '所有列打印在一页
- Do Until 工作表.HPageBreaks.Count > 行页数 - 1
- 调整行高 工作表, 1.05
- Loop
- Do Until 工作表.VPageBreaks.Count > 列页数 - 1
- 调整列宽 工作表, 1.05
- Loop
- Do Until 工作表.HPageBreaks.Count < 行页数
- 调整行高 工作表, 0.99
- Loop
- Do Until 工作表.VPageBreaks.Count < 列页数
- 调整列宽 工作表, 0.95
- Loop
- End With
- Application.PrintCommunication = True '重连打印机
- End If
- End Sub
- Private Sub 调整列宽(工作表, 倍数)
- With 工作表
- 列数 = .UsedRange.Columns.Count
- If 列数 = .Columns.Count Then 列数 = .[a1].CurrentRegion.Columns.Count
- For 列 = 1 To 列数
- .Cells(1, 列).ColumnWidth = .Cells(1, 列).ColumnWidth * 倍数
- Next
- End With
- End Sub
- Private Sub 调整行高(工作表, 倍数)
- With 工作表
- 行数 = .UsedRange.Rows.Count
- For 行 = 1 To 行数
- .Cells(行, 1).RowHeight = .Cells(行, 1).RowHeight * 倍数
- Next
- End With
- End Sub
- Function 设置打印机(Optional 打印机名称 = "黑白") '成功返回true,失败返回false,打印机名称是前后*号匹配的
- 设置打印机 = False
- Set ws = CreateObject("wscript.network")
- Set 打印机列表 = ws.EnumPrinterConnections
- 打印机名称 = UCase(打印机名称)
- For i = 1 To 打印机列表.Count - 1 Step 2
- If UCase(打印机列表(i)) Like "*" & 打印机名称 & "*" Then 打印机名称 = 打印机列表(i): Exit For '打印机名称
- Next
- On Error GoTo myerror
- i = 0
- Do While True
- If i > 100 Then End '一般到不了这个数
- Application.ActivePrinter = 打印机名称 & " 在 Ne" & Format(i, "00") & ":"
- Exit Do
- myerror:
- Resume nextLoop
- nextLoop:
- i = i + 1
- Loop
- 设置打印机 = True
- End Function
复制代码
|
|