作者:绿色风
分类:
时间:2022-08-17
浏览:144
楼主 kevinchengcw |
Q: 我有一个工作表,在A列的分类项里采用了合并单元格的方式,打印的时候经常会遇到分页符在合并单元格中,造成一个单元格打印到了两页里,有没有什么办法可以避免这一问题出现呢? A: 通过VBA的workbook_beforeprint事件我们完全可以实现在打印的时候将位于合并单元格中间的分页符调整到合并单元格上方,从而实现只打印完整的合并单元格的功能,代码如下(仅对A列合并单元格有效):
- Private Sub Workbook_BeforePrint(Cancel As Boolean)
- Dim Rng As Range
- Dim R, N, I As Integer
- ActiveWindow.View = xlPageBreakPreview '打开分页预览,这样会出现分页符
- If ActiveSheet.HPageBreaks.Count > 0 Then '当大于一页时执行代码
- For N = 1 To ActiveSheet.HPageBreaks.Count '循环列举各个水平分页符位置
- R = ActiveSheet.HPageBreaks(N).Location.Row '取得当前列举到的水平分布所在的行的值
- I = R '储存行值的备份
- Cells(R, 1).Select '选中当前行的第一列的单元格
- If Selection.MergeCells = True And I > Selection.Row Then I = Selection.Row '如果被选中的单元格是合并单元格,并且分页符所在的行值不是最顶部单元格的行值,则将最顶部的行值赋值给变量I
- If I <> R Then ActiveSheet.HPageBreaks.Add before:=Cells(I, 1) '如果I的值与当前分页符所在的行值不等,则添加分页符到合并单元格顶部的行的位置(注:这样自动分页符会删除,并重新生成新的整页的分页符)
- Next N '下一个水平分页符
- End If
- ActiveWindow.View = xlNormalView '处理完成,恢复到普通视图
- End Sub
如果是其他列的单元格请调整cells(R,1).select里的1的值为对应的列值 |
2楼 wnianzhong |
收藏了,以后能用的到,谢谢! |
3楼 lrlxxqxa |
这个功能实际工作中用得到 |
4楼 wygwyg0624 |
实用,顶了,找了好几天,先谢谢了 |
5楼 kevinchengcw |
再来个功能升级版 ,可以将合并单元格拆分到两页去.- Private Sub Workbook_BeforePrint(Cancel As Boolean)
- Dim Rng As Range
- Dim R, N, I, A As Integer
- ActiveWindow.View = xlPageBreakPreview
- If ActiveSheet.HPageBreaks.Count > 0 Then
- For N = 1 To ActiveSheet.HPageBreaks.Count
- R = ActiveSheet.HPageBreaks(N).Location.Row
- I = R
- Cells(R, 1).Select
- If Selection.MergeCells = True And I > Selection.Row Then
- I = Selection.Row
- If I <> R Then
- A = Selection.Row + Selection.Rows.Count - 1
- Selection.UnMerge
- Range(Cells(I, 1), Cells(R - 1, 1)).Merge
- Range(Cells(R, 1), Cells(A, 1)).Merge
- 'Range(Cells(I, 1), Cells(A, 1)).Borders.LineStyle = 1 '这句如果有边框就取消前面的注释单引号
- Cells(R, 1) = Cells(I, 1).Value
- End If
- End If
- Next N
- End If
- ActiveWindow.View = xlNormalView
- End Sub
|
6楼 wjc2090742 |
用的到。如果可以根据页面的内容多寡来判断是要调整分页符位置还是把合并单元格拆分就更完美了,那我就全不用手工了 |
7楼 yf_home |
测试了一下,在Excel2003下效果不错,但在Excel2010没有效果,好像触发不了事件? 测试环境:xp繁体系统+OFFICE2010繁体家庭版 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一