ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: sjzjtu

[求助] 一个困扰我N的问题------合并单元格如何完美跨页打印

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-9-11 16:56 | 显示全部楼层
sjzjtu 发表于 2012-5-3 17:06
手工改缺陷很大,稍微动下,全部要重新来,比如中间插入条数据,修改下页边距啥的。都要重新再调整。

...

Excel自己真的就有这个功能吗?楼主找到没?

TA的精华主题

TA的得分主题

发表于 2015-12-26 13:19 | 显示全部楼层
不论是普通表还是透视表,都有这个问题,继续顶起求解啊,各路MVP现身啊

TA的精华主题

TA的得分主题

发表于 2017-1-13 08:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-1-23 13:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
同样需要解决此问题的方法,学习

TA的精华主题

TA的得分主题

发表于 2020-4-3 20:14 | 显示全部楼层
sjzjtu 发表于 2012-5-3 16:15
首先谢谢您的顶贴和热情解答。

但这个答案似乎不是完美的,因为不想借助第三方软件或者宏。

宏代码可以实现合并单元格的排序、跨页打印显示问题

TA的精华主题

TA的得分主题

发表于 2020-4-5 11:33 来自手机 | 显示全部楼层
永远的野蛮人 发表于 2015-8-4 11:05
别怪我挖坟,从2010年开始做统计到现在一直没有完美解决的方案,每次需要调整报出的表格都要花我大量的时间 ...

问题得到解决了吗?

TA的精华主题

TA的得分主题

发表于 2020-5-1 23:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-2 20:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-9-16 16:51 | 显示全部楼层
就这么个问题,竟然一直没人解决。本人是用AutoHotkey的,提供了两种解决方案:
1. 合并单元格移到下页
for hBreak in st.HPageBreaks { ;遍历所有分页符(行)
    cell := hBreak.location ;获取下一页A列的第1个单元格
    if (cell.address != cell.MergeArea.cells(1).address) { ;为合并单元格中的次单元格
        hBreak.delete() ;删除分布符
        st.HPageBreaks.add(cell.MergeArea.cells(1)) ;添加分页符到合并单元格上方
    }
}

2.合并单元格拆分为两行
for hBreak in st.HPageBreaks {
    cell := hBreak.location
    if (cell.address != cell.MergeArea.cells(1).address) {
        cell1 := cell.MergeArea.cells(1) ;合并单元格的第1个单元格
        rngMerge := cell.MergeArea ;合并单元格区域
        cell.UnMerge
        cell1.AutoFill(rngMerge, 1) ;填充取消合并后的空单元格
        st.range(cell1, cell.offset(-1)).Merge ;合并分页符上方
        st.range(cell, rngMerge.cells(rngMerge.cells.count)).Merge ;合并分页符下方
    }
}

TA的精华主题

TA的得分主题

发表于 2021-10-31 23:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. '参考论坛里的资料 ,自己改了一下
  2. Sub 跨页的合并单元格区域拆分以便打印()
  3.     Dim 标题, 选项
  4.     标题 = "跨页的合并单元格区域拆分以便打印,需要先设置一下打印区域"
  5.     选项 = MsgBox("  是  :  已经按部分合并单元格局部调整分页符位置" & Chr(10) & "  否  :  在复制工作表上操作" & Chr(10) & "取消:退出并手动调整部分分页符位置 ", 3, 标题)
  6.     If 选项 = 6 Then
  7.         '
  8.     ElseIf 选项 = 7 Then
  9.         ActiveSheet.Copy After:=Worksheets(ActiveSheet.Index)
  10.         ActiveSheet.Name = "按分页分拆合并单元格" & Format(Now, "mmddhhmmss") & Int((9 * Rnd) + 1)
  11.     ElseIf 选项 = 2 Then
  12.         ActiveWindow.View = xlPageBreakPreview  '打开分页预览,这样会出现分页符
  13.         Exit Sub
  14.     End If
  15.     Application.ScreenUpdating = False '防止眼花了
  16.     Application.DisplayAlerts = False '取消了警告提示
  17.     Dim rng As Range, A1 As Range, A2 As Range, My_str, My_str_1, My_str_2
  18.     Dim R, Nr, Nc, I As Integer, 边框线型, 线型粗细
  19.     Dim sht As Worksheet
  20.     Set sht = ActiveSheet
  21.     Dim Sel_R_Start, Sel_C_Start, Sel_R_End, Sel_C_End
  22.     Dim sel As Range
  23.     Dim s_str As String
  24.     With sht
  25.         ActiveWindow.View = xlPageBreakPreview  '打开分页预览,这样会出现分页符
  26.         If .PageSetup.PrintArea = "" Then
  27.             .PageSetup.PrintArea = .UsedRange.Address
  28.         End If
  29.         s_str = .PageSetup.PrintArea
  30.         Set sel = Range(s_str)
  31.         Debug.Print sel.Address
  32.         Sel_R_Start = sel.Row
  33.         Sel_C_Start = sel.Column
  34.         Sel_R_End = sel.Rows.Count + sel.Row - 1
  35.         Sel_C_End = sel.Columns.Count + sel.Column - 1
  36.         If .HPageBreaks.Count > 0 Then  '当大于一页时执行代码
  37.         For Nr = 1 To .HPageBreaks.Count   '循环列举各个水平分页符位置
  38.             R = .HPageBreaks(Nr).Location.Row   '取得当前列举到的水平分布所在的行的值
  39.             I = R '储存行值的备份
  40.             For Nc = Sel_C_Start To Sel_C_End
  41.                 If .Cells(R, Nc).MergeCells = True And .Cells(R, Nc).MergeArea.Cells(1).Row < I Then
  42.                     With .Cells(R, Nc).MergeArea '.Select  '选中当前行的第一列的单元格
  43.                         My_str = .Cells(1, 1).Value
  44.                         My_str_1 = Split(.Address, "$")
  45.                         My_str_1(4) = I - 1
  46.                         My_str_2 = Split(.Address, "$")
  47.                         My_str_2(2) = I & ":"
  48.                         Set A1 = Range(Join(My_str_1, "$"))
  49.                         Set A2 = Range(Join(My_str_2, "$"))
  50.                         边框线型 = .Borders(xlEdgeBottom).LineStyle
  51.                         线型粗细 = .Borders(xlEdgeBottom).Weight
  52.                         Debug.Print 边框线型
  53.                         .UnMerge
  54.                         With A1
  55.                             .Merge
  56.                             .Value = My_str
  57.                             .Borders(xlEdgeBottom).LineStyle = 边框线型
  58.                             .Borders(xlEdgeBottom).Weight = 线型粗细
  59.                         End With
  60.                         With A2
  61.                             .Merge
  62.                             .Value = My_str
  63.                             .Borders(xlEdgeTop).LineStyle = 边框线型
  64.                             .Borders(xlEdgeTop).Weight = 线型粗细
  65.                         End With
  66.                     End With
  67.                 End If
  68.             Next Nc
  69.         Next Nr  '下一个水平分页符
  70.     End If
  71.     '    ActiveWindow.View = xlPageBreakPreview
  72.     ActiveWindow.View = xlNormalView  '处理完成,恢复到普通视图
  73. End With
  74. Application.ScreenUpdating = True
  75. Application.DisplayAlerts = True '打开警告提示
  76. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 20:15 , Processed in 0.043689 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表