Sub TestAutoAdjustColumnWidthBaseOnModel()
Set ModelSheet = ThisWorkbook.Worksheets("单据模板")
Set PrintSheet = ThisWorkbook.Worksheets("批量打印")
AutoAdjustColumnWidthBaseOnModel ModelSheet, PrintSheet
End Sub
Sub AutoAdjustColumnWidthBaseOnModel(ByVal ModelSheet As Worksheet, ByVal PrintSheet As Worksheet, Optional modelCountInOnePage As Variant)
Dim ModelRng As Range '模板单元格
Dim modelColumnWidth() As Double '模板列宽数据
Dim modelColumnCount As Long '模板行数
Dim sumModelColumnWidth As Double '模板累计列宽
Dim adjustScale As Double '调整比例
'Dim modelCountInOnePage As Long '一页打印几个单据模板
Dim BreakColumn As Long '垂直分页符位置
Dim FirstPageSumColumnWidth As Double '累计首页列宽
Dim ColumnsInOnePage As Long '每页打印多少行
Dim i As Long, m As Long '行号 With ModelSheet
If Application.WorksheetFunction.Count(.Cells) > 0 Then
'计数防止计算行号发生错误
EndRow = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row + 1
EndCol = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
'获取单据模板单元格区域
Set ModelRng = .Range(.Cells(1, 1), .Cells(EndRow, EndCol))
Debug.Print ModelRng.Address
'获取模板单元格行数和累计列宽
modelColumnCount = ModelRng.Columns.Count
ReDim modelColumnWidth(1 To modelColumnCount)
sumModelColumnWidth = 0
For i = 1 To modelColumnCount
modelColumnWidth(i) = ModelRng.Columns(i).ColumnWidth
sumModelColumnWidth = sumModelColumnWidth + ModelRng.Columns(i).ColumnWidth
Next i
Debug.Print sumModelColumnWidth
'记录列宽
End If
End With
' With PrintSheet
Debug.Print "垂直分页符个数:"; .VPageBreaks.Count
'先判断是否有垂直分页符,如果没有则退出
If .VPageBreaks.Count > 0 Then
'获取第一页与第二页分页符所在的单元格
BreakColumn = .VPageBreaks(1).Location.Column
Debug.Print "首页分页符所在的行号:"; BreakColumn
'累计第一页所有行的高度
i = 1
Do While i < BreakColumn
FirstPageSumColumnWidth = FirstPageSumColumnWidth + .Columns(i).ColumnWidth
i = i + 1
Loop 'Stop Debug.Print FirstPageSumColumnWidth
'获取第一页最后一个成绩单末尾的空白行行号
If IsMissing(modelCountInOnePage) Then
ColumnsInOnePage = BreakColumn
Do While Application.WorksheetFunction.Count(.Columns(ColumnsInOnePage)) > 0
ColumnsInOnePage = ColumnsInOnePage - 1
Loop
Debug.Print "首页最后一个成绩单截止行号1:"; ColumnsInOnePage
ColumnsInOnePage = Application.WorksheetFunction.Max(BreakColumn, modelColumnCount)
Debug.Print "首页最后一个成绩单截止行号2:"; ColumnsInOnePage
modelCountInOnePage = ColumnsInOnePage / modelColumnCount
Debug.Print "每一页放置多少个单据:"; modelCountInOnePage
End If '计算调整比例
adjustScale = FirstPageSumColumnWidth / (sumModelColumnWidth * modelCountInOnePage)
Debug.Print adjustScale '调整
EndCol = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column m = 0
For i = 1 To EndCol
m = m + 1
.Columns(i).ColumnWidth = modelColumnWidth(m) * adjustScale
If m = modelColumnCount Then m = 0 '逐个单据调整
Next i End If
End With End Sub

  

20180429 xlVBA套打单据自适应列宽的更多相关文章

  1. 20180429 xlVBA套打单据批量复制

    Sub testCopyModelRange() Set ModelSheet = ThisWorkbook.Worksheets("单据模板") Set PrintSheet = ...

  2. Asp.net 设置GridView自适应列宽不变形

    动态绑定的GridView由于列数不固定,而列又太多,这样设置GridView固定宽度就不能满足需求了.为此整理了两种方法来达到GridView自适应列宽不变形的效果. //在GridView的行数据 ...

  3. Delphi xe8 FMX StringGrid根据内容自适应列宽。

    Delphi xe8 FMX StringGrid根据内容自适应列宽. 网上的资料比较复杂,而且不是根据字体字号等设置列宽.故自己写了个function来用. function GetColMaxDa ...

  4. NPOI自适应列宽

    当本地没有安装Excel,但是又想导出Excel,采用Office插件是行不通的,NPOI是导出Excel的一个开源的插件.在导出Excel后,为了方便阅读,可以才采用自适应列宽的方式使得单元格的宽度 ...

  5. devpress grid表格自适应列宽的问题

    /// <summary> /// 自适应列宽,显示横向滚轴,只有当所有列都已经在界面上加载完成之后才能生效 /// </summary> public void setAut ...

  6. 设置tablewidget自适应列宽和设置自动等宽

      在网上很容易知道自适应列宽,100%不留空显示,这里还是提下: /*设置表格是否充满,即行末不留空*/ ui->tableWidget->horizontalHeader()-> ...

  7. .net设置中GridView自适应列宽

    有一个项目只有30分钟开发时间,速成,使用了古老的.net gridview. 但需要列宽自适应好看些. 于是琢磨了,实现思路如下. 先看下大致效果(很粗暴没有优化) 代码如下: protected ...

  8. Dev gridView中设置自适应列宽和日期显示格式、金额的显示格式

    在Dev GridView控件中,数据库中表数据日期都是长日期格式(yyyy-MM-dd HH:mm:ss),但显示在控件变成短日期格式(yyyy-MM-dd),金额显示要显示精确的数值, 比如80. ...

  9. Asp.net简单代码设置GridView自适应列宽不变形

    动态绑定的GridView由于列数不固定,而列又太多,是要自定设置gridView的宽度 //在GridView的行数据绑定完的事件中设置 protected void gvObjectList_Ro ...

随机推荐

  1. qt无法定位程序输入点 于动态链接库 qt5core.dll

    造成步骤:一开始是将现成的dll[Qt5.9.3]放在文件夹里,然后使用Qt5.7.1编译的exe放进去,产生标题错误 原因:dll库不匹配 解决:使用Qt5.7.1自带的cmd命令行,使用winde ...

  2. Linux内核中的netlink是什么?

    答: 是一种内核与用户应用间的双向数据传输方式,用户态使用传统的socketAPI即可使用netlink提供的功能,但是内核态需要使用专门的api来使用netlink.

  3. Elasticsearch 异常处理

    cluster_block_exception https://stackoverflow.com/questions/50609417/elasticsearch-error-cluster-blo ...

  4. P4592 [TJOI2018]异或

    吐槽 睡起来写道模板清醒一下 貌似有两个log的树剖写法,还有一个log的Trie树的差分做法(类似于count on a tree),然后一个log的要把两个询问分开写,一个dfs序一个差分,然后我 ...

  5. 深度学习课程笔记(十七)Meta-learning (Model Agnostic Meta Learning)

    深度学习课程笔记(十七)Meta-learning (Model Agnostic Meta Learning) 2018-08-09 12:21:33 The video tutorial can ...

  6. Balloons

    题目链接:http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2401 类似求连通块的问题,可以参考紫书(P162 油田),对这两个人分别执行dfs. ...

  7. HDU 5607 graph(矩阵乘法)

    题意 在一个 \(n\) 个节点 \(m\) 条边的有向图上随机游走,有 \(Q\) 个询问,每次给定一个起点 \(u\) 和步数 \(K\) ,每次回答最后停在每个节点的概率. \(1 \leq n ...

  8. pgAdmin的数据导入之CSV

    在向数据库批量导入数据时,可以参考此过程 1.对于现有的Excel文件,首先应另存为 .csv文件,记住分割符(逗号分割),在后边导入用到. 2.用记事本打开保存后的csv文件,以utf-8格式另存为 ...

  9. spring配置redis

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  10. 并发编程之IO模型

    一.阻塞IO(blocking IO) from concurrent.futures import ThreadPoolExecutor import socket server = socket. ...