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. python --- 22 初始模块 random time collections functools

    一 .初始模块 1.从⼩到⼤的顺序: ⼀条代码 < 语句块 < 代码块(函数, 类) < 模块 2.引入模块的方式 ①   import   模块 ②   from   模块  im ...

  2. IPVS负载均衡

    概念: ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的4层LAN交换,作为 Linux 内核的一部分.ipvs运行在主机上,在真实服务器集群前充当负载均衡器. ...

  3. linux下gzip的压缩详解

    Linux压缩保留源文件的方法: gzip -c filename > filename.gz Linux解压缩保留源文件的方法: gunzip -c filename.gz > file ...

  4. jvm:分析工具

    bin/jvisualvm.exe 可查看类实例数 bin/jconsole.exe 监控线程,堆,等 http://blog.csdn.net/yaowj2/article/details/7107 ...

  5. XMatch: 您的部门管理助手

    本博客为XMatch项目宣传博客. XMatch: 您的部门管理助手 目录 一.产品概述 二.产品功能 三.产品的创新特色 四.推广方案 五.宣传图 一.产品概述 当前社团的各方面管理工作主要都由手工 ...

  6. 搭建springboot环境

    1.前戏准备: SpringBoot核心jar包:这里直接从Spring官网下载了1.5.9版本. jdk:jdk1.8.0_45. maven项目管理工具:3.5版本. tomcat:8.5版本. ...

  7. Go 定长的数组

    1.Go 语言数组的简介 几乎所有的计算机语言都有数组,应用非常的广泛.同样,在 Go 语言中也有数组并且在数组的基础上还衍生出了切片(slice). 数组是一系列同一类型数据的集合,数组中包含的每个 ...

  8. command not found shell returned 127

    在 vim 修改某个文件后,退出时,报了如此一个错误.日志如下: 并不是什么大问题,只是在刚入坑 ssh 时,真的被人代入坑里了. # 强制退出并保存 :wq! 不是 :!wq,不知道有没有有缘的小伙 ...

  9. Codeforces 617 E. XOR and Favorite Number

    题目链接:http://codeforces.com/problemset/problem/617/E 一看这种区间查询的题目,考虑一下莫队. 如何${O(1)}$的修改和查询呢? 令${f(i,j) ...

  10. Intellij idea 2017 图标含义

    File Type Icon Recognized in ActionScript files ActionScript files Ultimate Edition Active Server Pa ...