ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 判断表格是否规则表格(宏)——整个宇宙独家发布(更新)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-5-15 11:13 | 显示全部楼层 |阅读模式
本帖最后由 413191246se 于 2015-5-15 20:35 编辑

鉴于整个宇宙搜索不到《如何判断表格是否规则》(所谓规则,就是没有拆分,没有合并的自然表格),所以,昨天中午起,到现在,独家研制成功《表格判断是否规则》宏!
好东西不能独享,所以发布出来,以享众位,敬请批评指正!(附件中有示例文档和代码,大家可以下载练习;另外,附赠:表格处理(通用)宏代码。)
*************************更新情况:考虑到一行表格的特例,加入条件假设。Sub 表格判断是否规则()
'x=最大行数,y=最大列数,s=当前表格单元格数目,e=1=规则表格,e=0=不规则表格
    If Selection.Information(wdWithInTable) = False Then MsgBox "请将光标放在表格中!", vbOKOnly + vbCritical, "表格判断是否规则": End
    Dim t As Table, x As Long, y As Long, s As Long, j As Long, k As Long, e As Long
    Set t = Selection.Tables(1)
    x = t.Range.Information(wdEndOfRangeRowNumber)
    y = t.Range.Information(wdEndOfRangeColumnNumber)
    s = t.Range.Cells.Count
    If x <> 1 Then
        If s = x * y Then
            For k = 1 To y
                For j = 1 To x - 1
                    If t.Cell(j + 1, k).Width = t.Cell(j, k).Width Then e = 1 Else e = 0
                    If e = 0 Then Exit For
                Next j
                If e = 0 Then Exit For
            Next k
        Else
            e = 0
        End If
    Else
        e = 1
    End If
    If e = 1 Then MsgBox "规则表格!": t.Range.Font.Color = wdColorBlue Else MsgBox "不规则表格!": t.Range.Font.Color = wdColorRed
End Sub
********************表格处理(通用)宏代码(只须将代码中 '格式处理 这行替换为自己的具体代码即可处理单独或所有表格):
Sub 表格处理()
'功能:光标在表格中处理当前表格;否则处理所有表格!
    Dim t As Table, i As Long
    If Selection.Information(wdWithInTable) = True Then i = 1
    For Each t In ActiveDocument.Tables
        If i = 1 Then Set t = Selection.Tables(1)
        t.Select
        Selection.Font.Color = wdColorBlue '格式处理
        If i = 1 Then Exit For
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2015-5-15 13:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
测试通过。谢谢分享!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-15 16:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
    谢谢版主!
    一直以来,就想判断出表格是否规则,好在文档排版中应用,规则表格就多处理一下(表格内容自动适应,表格线会变动),不规则表格就不动表格线,只动表中文字。
    没想到,此问题并不是太难,网络查询多次没有结果,只好自己研究一下。
    具体想法,我略述一下:
    以2X3表格为例,如果是规则表格,必然有2X3=6个单元格;如果没有6个单元格,则必为不规则表格;但有6个单元格,却未必是规则表格;考虑到表格一般我要让它行高保持在0.9/0.7厘米,所以,行高无从辨别,只好从单元格列宽来判定。——此宏并非最终结果,仅供参考!(未实践更多特例,所以不敢保证正确。)
    因中午想回家匆忙,答应的附件忘了上传,这回上传一下:
附件: macro 判断表格是否规则.rar (5.06 KB, 下载次数: 39)

TA的精华主题

TA的得分主题

发表于 2015-5-21 05:18 | 显示全部楼层
是否使用Uniform属性更简单一些?
Table.Uniform 属性
如果表格中所有的行具有相同的列数,则该属性值为 True。Boolean 类型,只读。
语法

表达式.Uniform

表达式   返回 Table 对象的表达式。

示例


本示例创建一个包含拆分单元格的表格,然后显示一个消息框,确认并非表格中的每一行都具有相同的列数。

Visual Basic for Applications
Set newDoc = Documents.Add
Set myTable = newDoc.Tables.Add(Selection.Range, 5, 5)
myTable.Cell(3, 3).Split 1, 2
If myTable.Uniform = False Then MsgBox "Table is not uniform"

本示例确定包含选定内容的表格中的各行是否具有相同的列数。

Visual Basic for Applications
If Selection.Information(wdWithInTable) = True Then
    MsgBox Selection.Tables(1).Uniform
End If

表格的规则与否,可能分为四种情况,一是行列规范,均无合并;二是行合并(水平方向);三是列合并(垂直方向);四是行列合并(混合合并),根据实际情况而言,一二是比较理想的状态.
针对这两种情况,比较简单的容错处理,比如如果可以访问表格的第一行(Table.Rows(1))对象时,表明表格是较为规范的.

TA的精华主题

TA的得分主题

发表于 2015-5-21 12:39 | 显示全部楼层
对很多对象、属性、方法都不熟悉,更没去用过。学习了,谢谢老大!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 16:58 | 显示全部楼层
谢谢 守柔版主 指教!——经我反复实践,果然这个.uniform很管事,很简单!可以看出,它是指自然的X行Y列,不允许有丝毫表格线的移偏,稍有移偏,就显示False属性;只有绝对规则、规范、未拆分、未合并的表格,才是True。——我不得不承认,守版 才是整个宇宙第一人!佩服!敬仰!羡慕!谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 17:11 | 显示全部楼层
守版 提示后,只须 1 行代码即可,而我繁杂计算用了 18 行代码!OMG!境界真是天壤之别!守版 太伟大了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 21:07 | 显示全部楼层
——很遗憾!经 守版 提示只须一句代码即可辨别是否规则表格,即:if t.uniform=true then e=1 else e=0,但这是在单位Word2003上成功!——但在家里的Word2003中,却无法辨认规则表格!原因在于:家里Word2003中的VBA版本和单位的Word2003中的VBA 版本不一致!——还是谢谢 守版!

TA的精华主题

TA的得分主题

发表于 2019-1-4 19:38 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 16:51 , Processed in 0.025897 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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