ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 17368|回复: 4

[分享VBA]续表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-4-28 10:52 | 显示全部楼层 |阅读模式
功能:表格转页时,在第一行出现续表一的字样。 一个很不好的解决方法。前段时间做的(准备删了,),放上来,给大家抛砖引玉吧 Sub 孤独一叶() Dim a%, b%, c%, i%, atable As Table, d%, e% On Error Resume Next '忽略错误 Application.ScreenUpdating = False '屏幕不更新 For Each atable In ActiveDocument.Tables e = e + 1 a = atable.Range.Cells.Count '取得单元格数 b = atable.Columns.Count '取得列数 c = atable.Rows.Count '取得行数 If atable.Range.Cells(1).Range.Information(wdActiveEndPageNumber) <> _ atable.Range.Cells(a).Range.Information(wdActiveEndPageNumber) Then For i = 1 To a With atable.Range If .Cells(1).Range.Information(wdActiveEndPageNumber) <> _ .Cells(1 + i).Range.Information(wdActiveEndPageNumber) Then .Cells(1 + i).Range.Text = "续表" & e .Cells(1 + i).Merge mergeto:=.Cells(1 + i + b - 1) With .Cells(1 + i) .Borders(wdBorderLeft).LineStyle = wdLineStyleNone .Borders(wdBorderRight).LineStyle = wdLineStyleNone ' .Borders(wdBorderTop).LineStyle = wdLineStyleNone End With If .Cells(1 + i + d).Range.Information(wdFirstCharacterLineNumber) <> _ .Cells(1 + i + d + 1).Range.Information(wdFirstCharacterLineNumber) Then For d = 1 To b '取得第二行的单元格内容 '要求第一行为合并行,第二条像这样的行:姓名,年龄,等 .Cells(1 + i + d).Range.Text = Left(.Cells(1 + d).Range.Text, Len(.Cells(1 + d).Range.Text) - 2) Next Else For d = 1 To b '取得第二行的单元格内容 '要求第一行不为合并行,则第二行像这样的行:姓名,年龄,等 .Cells(1 + i + d).Range.Text = Left(.Cells(b + d).Range.Text, Len(.Cells(b + d).Range.Text) - 2) Next End If Exit For End If End With Next With Selection.Tables(1).Range.Cells(1).Borders ' .InsideLineStyle = wdLineStyleNone End With 'atable.Range.Cells(1).Range.Text = "续表" End If Next Application.ScreenUpdating = True '屏幕更新 End Sub

TA的精华主题

TA的得分主题

发表于 2006-4-29 06:45 | 显示全部楼层

感谢KONGGS兄的代码。

去年我也曾做过一个(比较简陋),正如孔兄所言,并非真正解决之道。一并拿出来,希望对大家有所帮助。

Sub Example()
Dim myTable As Table, oRow As Row, myRow As Row
Dim KeyText As String
KeyText = "接续上表"
Application.ScreenUpdating = False
Set myTable = Selection.Tables(1)
For Each oRow In myTable.Rows
If VBA.InStr(oRow.Range, KeyText) = 1 Then oRow.Delete
Next
Set myTable = Selection.Tables(1)
For Each oRow In myTable.Rows
If oRow.IsFirst = True Then GoTo GN
If oRow.Range.Information(wdActiveEndPageNumber) <> oRow.Previous.Range.Information(wdActiveEndPageNumber) Then
Set myRow = myTable.Rows.Add(oRow)
With myRow
.Cells.Merge
.Range.Text = KeyText
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
End With
End If
GN: Next
Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-4-29 07:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-2-13 16:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

 "接续上表"
这个能不能更加智能化一点。如果表的编号是采用  插入-> 题注 的方法插入,则应该是可以通过代码自动找到这个  编号,那么,接续上表  的这个字符串就可以用    "接" & 变量 & "表"   整个字符串来表达。由于我只对 Excel 的 VBA 有多了解,对 Word 的 VBA 还没有深入学习。

所以,只能提出意见,完善的方法。而不能修改老大的代码。

这个代码我收藏了,以后有机会好好学一下 Word 的 VBA 。

TA的精华主题

TA的得分主题

发表于 2020-5-13 14:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
守柔 发表于 2006-4-29 06:45
感谢KONGGS兄的代码。
去年我也曾做过一个(比较简陋),正如孔兄所言,并非真正解决之道。一并拿出来,希 ...

非常感谢,好用!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-28 04:48 , Processed in 0.057628 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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