20180429 xlVBA套打单据自适应列宽
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套打单据自适应列宽的更多相关文章
- 20180429 xlVBA套打单据批量复制
Sub testCopyModelRange() Set ModelSheet = ThisWorkbook.Worksheets("单据模板") Set PrintSheet = ...
- Asp.net 设置GridView自适应列宽不变形
动态绑定的GridView由于列数不固定,而列又太多,这样设置GridView固定宽度就不能满足需求了.为此整理了两种方法来达到GridView自适应列宽不变形的效果. //在GridView的行数据 ...
- Delphi xe8 FMX StringGrid根据内容自适应列宽。
Delphi xe8 FMX StringGrid根据内容自适应列宽. 网上的资料比较复杂,而且不是根据字体字号等设置列宽.故自己写了个function来用. function GetColMaxDa ...
- NPOI自适应列宽
当本地没有安装Excel,但是又想导出Excel,采用Office插件是行不通的,NPOI是导出Excel的一个开源的插件.在导出Excel后,为了方便阅读,可以才采用自适应列宽的方式使得单元格的宽度 ...
- devpress grid表格自适应列宽的问题
/// <summary> /// 自适应列宽,显示横向滚轴,只有当所有列都已经在界面上加载完成之后才能生效 /// </summary> public void setAut ...
- 设置tablewidget自适应列宽和设置自动等宽
在网上很容易知道自适应列宽,100%不留空显示,这里还是提下: /*设置表格是否充满,即行末不留空*/ ui->tableWidget->horizontalHeader()-> ...
- .net设置中GridView自适应列宽
有一个项目只有30分钟开发时间,速成,使用了古老的.net gridview. 但需要列宽自适应好看些. 于是琢磨了,实现思路如下. 先看下大致效果(很粗暴没有优化) 代码如下: protected ...
- Dev gridView中设置自适应列宽和日期显示格式、金额的显示格式
在Dev GridView控件中,数据库中表数据日期都是长日期格式(yyyy-MM-dd HH:mm:ss),但显示在控件变成短日期格式(yyyy-MM-dd),金额显示要显示精确的数值, 比如80. ...
- Asp.net简单代码设置GridView自适应列宽不变形
动态绑定的GridView由于列数不固定,而列又太多,是要自定设置gridView的宽度 //在GridView的行数据绑定完的事件中设置 protected void gvObjectList_Ro ...
随机推荐
- Java.util.properties读取配置文件分析
Java.util.properties API链接: https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html Clas ...
- vue学习【第三篇】:vue之node.js的简单介绍
什么是node.js 它是可以运行JavaScript的服务平台,可以吧它当做一门后端程序,只是它的开发语言是JavaScript 安装node.js node.js的特性 - 非阻塞IO模型 - 时 ...
- 如果让我重来,我会选择C和(或者)Python。
如果让我重来,我会选择C和(或者)Python.Python语法和库更丰富,上手更容易,使用更方便.C简单直接,学习成本不高,贴近底层,能帮助了解底层细节.先强调:1. 语言只是工具,假以时日,你都会 ...
- Docker中的Cgroup Driver:Cgroupfs 与 Systemd
在安装kubernetes的过程中,会出现 failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgrou ...
- Spring-Cache 注解 @Cacheable,@CachePut , @CacheEvict
1.自动生成key @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Ob ...
- 修改控制台为Consolas字体
windows下控制台字体修改为Consolas字体比较好看,修改步骤如下: 临时修改 命令行cmd命令进入控制台,输入chcp 437命令,执行. 右键点击标题栏进入属性,修改字体为Consolas ...
- Python-ConfigParser获取配置项名称大小写问题
C:\Python27\Lib\ConfigParser.py: def optionxform(self, optionstr): return optionstr.lower() 会将配置文件中的 ...
- 原生js总结
数据类型 基本类型值包括: undefined,null,Boolean,Number和String,这些类型分别在内存中占有固定的大小空间,它们的值保存在栈空间,我们通过按值来访问的. 引用类型包括 ...
- 在用node安装某个全局模块的时候,没有权限修改node_modules
一.问题 今天在安装公司内部的一个npm模块的时候,发现报错了⬇ 第一行错误: deprecated graceful-fs@1.2.3: please upgrade to graceful-fs ...
- hdu 3208 Integer’s Power 筛法
Integer’s Power Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...